From e9cfd84cab6f573c1940e6f6dfec56dd957b7d1b Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Thu, 17 Nov 2022 16:23:33 +0100 Subject: [PATCH 001/136] Add Gatk4 GermlineCNVCaller module --- modules/local/gatk4/germlinecnvcaller/main.nf | 52 +++++++++++++++++++ .../local/gatk4/germlinecnvcaller/meta.yml | 52 +++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 modules/local/gatk4/germlinecnvcaller/main.nf create mode 100644 modules/local/gatk4/germlinecnvcaller/meta.yml diff --git a/modules/local/gatk4/germlinecnvcaller/main.nf b/modules/local/gatk4/germlinecnvcaller/main.nf new file mode 100644 index 00000000..9f9aa7e4 --- /dev/null +++ b/modules/local/gatk4/germlinecnvcaller/main.nf @@ -0,0 +1,52 @@ +process GATK4_GERMLINECNVCALLER { + tag "$meta.id" + label 'process_medium' + + if(params.enable_conda){ + error "Conda environments cannot be used for GATK4/DetermineGermlineContigPloidy at the moment. Please use docker or singularity containers." + } + container "broadinstitute/gatk:4.3.0.0" + + input: + tuple val(meta), path(tsv) + path intervals + path model + path ploidy + + output: + tuple val(meta), path("*.tar.gz"), emit: tar_gz + 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 intervals_command = intervals ? "--intervals $intervals" : "" + def model_command = model ? "--model $model" : "" + def input_list = tsv.collect{"--input $it"}.join(' ') + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK GermlineCNVCaller] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ + $input_list \\ + --contig-ploidy-calls ${prefix}-calls \\ + --output cnv_calls/ \\ + --output-prefix $prefix \\ + $args \\ + $intervals_command \\ + $model_command + tar -czvf cnv_calls.tar.gz cnv_calls + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/gatk4/germlinecnvcaller/meta.yml b/modules/local/gatk4/germlinecnvcaller/meta.yml new file mode 100644 index 00000000..3ac5068e --- /dev/null +++ b/modules/local/gatk4/germlinecnvcaller/meta.yml @@ -0,0 +1,52 @@ +name: "gatk4_germlinecnvcaller" +description: Calls copy-number variants in germline samples given their counts and the output of DetermineGermlineContigPloidy. +keywords: + - gatk + - gatk4_germlinecnvcaller +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"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tsv: + type: file + description: TSV file + pattern: "*.tsv" + - model: + type: directory + description: model directory + - tar: + type: file + description: TAR file + pattern: "*.tar" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - tar: + type: file + description: TAR file + pattern: "*.tar" + +authors: + - "@ryanjameskennedy" + - "@ViktorHy" From 120a674eb578f0fedd7a651f19b3942e3a5903df Mon Sep 17 00:00:00 2001 From: Ryan James Kennedy Date: Wed, 8 Mar 2023 16:59:04 +0000 Subject: [PATCH 002/136] GATK nightly bug fix --- modules/local/gatk4/germlinecnvcaller/main.nf | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/modules/local/gatk4/germlinecnvcaller/main.nf b/modules/local/gatk4/germlinecnvcaller/main.nf index 9f9aa7e4..bdaafb19 100644 --- a/modules/local/gatk4/germlinecnvcaller/main.nf +++ b/modules/local/gatk4/germlinecnvcaller/main.nf @@ -3,9 +3,9 @@ process GATK4_GERMLINECNVCALLER { label 'process_medium' if(params.enable_conda){ - error "Conda environments cannot be used for GATK4/DetermineGermlineContigPloidy at the moment. Please use docker or singularity containers." + error "Conda environments cannot be used for GATK4/GermlineCNVCaller at the moment. Please use docker or singularity containers." } - container "broadinstitute/gatk:4.3.0.0" + container "broadinstitute/gatk-nightly:2023-03-08-4.3.0.0-47-g4ba4ab590-NIGHTLY-SNAPSHOT" input: tuple val(meta), path(tsv) @@ -42,7 +42,18 @@ process GATK4_GERMLINECNVCALLER { $args \\ $intervals_command \\ $model_command - tar -czvf cnv_calls.tar.gz cnv_calls + tar -czvf ${prefix}.tar.gz cnv_calls + + 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}.tar.gz cat <<-END_VERSIONS > versions.yml "${task.process}": From 4528288603277a9649c3bef050b0ca0e3140696f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 2 Apr 2023 03:24:51 +0200 Subject: [PATCH 003/136] add cadd snv --- conf/modules/annotate_cadd.config | 28 +++++++++++++++ conf/test.config | 7 ++-- main.nf | 1 + modules/local/cadd.nf | 55 +++++++++++++++++++++++++++++ nextflow.config | 1 + nextflow_schema.json | 7 ++++ subworkflows/local/annotate_cadd.nf | 26 ++++++++++++++ subworkflows/local/annotate_snvs.nf | 20 +++++++---- workflows/raredisease.nf | 4 +++ 9 files changed, 140 insertions(+), 9 deletions(-) create mode 100644 conf/modules/annotate_cadd.config create mode 100644 modules/local/cadd.nf create mode 100644 subworkflows/local/annotate_cadd.nf diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config new file mode 100644 index 00000000..c6827584 --- /dev/null +++ b/conf/modules/annotate_cadd.config @@ -0,0 +1,28 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Config file for defining DSL2 per module options and publishing paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Available keys to override module options: + ext.args = Additional arguments appended to command in module. + ext.args2 = Second set of arguments appended to command in module (multi-tool modules). + ext.args3 = Third set of arguments appended to command in module (multi-tool modules). + ext.prefix = File name prefix for output files. + ext.when = Conditional clause +---------------------------------------------------------------------------------------- +*/ + +// +// CADD annotation +// + +process { + withName: '.*ANNOTATE_SNVS:ANNOTATE_CADD:BCFTOOLS_VIEW' { + ext.args = { "--output-type z --types indels" } + ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_indels" } + } + + withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:CADD' { + ext.when = { !(workflow.profile.contains("test")) } + ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } + } +} diff --git a/conf/test.config b/conf/test.config index 5fb4c9e8..20a18a2c 100644 --- a/conf/test.config +++ b/conf/test.config @@ -18,7 +18,10 @@ params { max_cpus = 2 max_memory = '6.GB' max_time = '2.h' - mt_contig_name = 'MT' + + // reference params + igenomes_ignore = true + mt_contig_name = 'MT' // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' @@ -55,5 +58,3 @@ process { ext.when = { workflow.stubRun } } } - - diff --git a/main.nf b/main.nf index 64368429..fc1c6ca4 100644 --- a/main.nf +++ b/main.nf @@ -23,6 +23,7 @@ params.fasta_fai = WorkflowMain.getGenomeAttribute(params, params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') +params.cadd_annotation = WorkflowMain.getGenomeAttribute(params, 'cadd_annotation') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') params.intervals_wgs = WorkflowMain.getGenomeAttribute(params, 'intervals_wgs') diff --git a/modules/local/cadd.nf b/modules/local/cadd.nf new file mode 100644 index 00000000..ce1e369d --- /dev/null +++ b/modules/local/cadd.nf @@ -0,0 +1,55 @@ +process CADD { + tag "$meta.id" + label 'process_medium' + + conda "bioconda::cadd-scripts=1.6 anaconda::conda=4.14.0 conda-forge::mamba=1.4.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0': + 'quay.io/biocontainers/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0' }" + + containerOptions { + (workflow.containerEngine == 'singularity') ? + "--writable -B ${annotation_dir}:/usr/local/share/cadd-scripts-1.6-1/data/annotations" : + "--privileged -v ${annotation_dir}:/usr/local/share/cadd-scripts-1.6-1/data/annotations" + } + + input: + tuple val(meta), path(vcf) + path(annotation_dir) + + output: + tuple val(meta), path("*.tsv.gz"), 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}" + def VERSION = "1.6" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + """ + cadd.sh \\ + -o ${prefix}.tsv.gz \\ + $args \\ + $vcf + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cadd: $VERSION + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "1.6" // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. + """ + touch ${prefix}.tsv.gz + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + cadd: $VERSION + END_VERSIONS + """ +} diff --git a/nextflow.config b/nextflow.config index c0cbfbac..39ba2245 100644 --- a/nextflow.config +++ b/nextflow.config @@ -265,6 +265,7 @@ includeConfig 'conf/modules/prepare_references.config' includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' +includeConfig 'conf/modules/annotate_cadd.config' // Function to ensure that resource requirements don't go beyond // a maximum limit diff --git a/nextflow_schema.json b/nextflow_schema.json index 9cebc236..75a4ccc6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -103,6 +103,13 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, + "cadd_annotation": { + "type": "string", + "format": "directory-path", + "fa_icon": "fas fa-file", + "description": "Path to the directory containing cadd annotations.", + "help_text": "This folder contains the uncompressed files that would otherwise be in data/annotation folder as described in https://github.com/kircherlab/CADD-scripts/#manual-installation." + }, "gnomad_af": { "type": "string", "format": "path", diff --git a/subworkflows/local/annotate_cadd.nf b/subworkflows/local/annotate_cadd.nf new file mode 100644 index 00000000..2f332bcd --- /dev/null +++ b/subworkflows/local/annotate_cadd.nf @@ -0,0 +1,26 @@ +// +// A subworkflow to annotate snvs +// + +include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' +include { CADD } from '../../modules/local/cadd' + +workflow ANNOTATE_CADD { + + take: + ch_vcf // channel: [mandatory] [ val(meta), path(vcfs) ] + ch_index // channel: [mandatory] [ val(meta), path(tbis) ] + ch_cadd_scores // channel: [mandatory] [ val(meta), path(dir) ] + + main: + ch_versions = Channel.empty() + + BCFTOOLS_VIEW(ch_vcf.join(ch_index),[],[],[]) + + CADD(BCFTOOLS_VIEW.out.vcf, ch_cadd_scores) + + emit: + vcf_ann = Channel.empty() // channel: [ val(meta), path(vcf) ] + // tbi = ch_vep_index // channel: [ val(meta), path(tbi) ] + // versions = ch_versions // channel: [ path(versions.yml) ] +} diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index cfbb4b04..9fca95f5 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -14,12 +14,14 @@ include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/ta include { TABIX_TABIX as TABIX_BCFTOOLS_CONCAT } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_BCFTOOLS_VIEW } from '../../modules/nf-core/tabix/tabix/main' include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' +include { ANNOTATE_CADD } from '../../subworkflows/local/annotate_cadd' workflow ANNOTATE_SNVS { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] analysis_type // string: [mandatory] 'wgs' or 'wes' + ch_cadd_scores // channel: [mandatory] [ path(annotation) ] ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] @@ -68,10 +70,16 @@ workflow ANNOTATE_SNVS { BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS_VIEW.out.tbi).collect().set { ch_vcf_scatter_in } - GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(ch_split_intervals)).vcf.set { ch_vep_in } + GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(ch_split_intervals)) + + ANNOTATE_CADD ( + GATK4_SELECTVARIANTS.out.vcf, + GATK4_SELECTVARIANTS.out.tbi, + ch_cadd_scores + ) ENSEMBLVEP_SNV( - ch_vep_in, + GATK4_SELECTVARIANTS.out.vcf, val_vep_genome, "homo_sapiens", val_vep_cache_version, @@ -82,13 +90,13 @@ workflow ANNOTATE_SNVS { TABIX_VEP (ENSEMBLVEP_SNV.out.vcf_gz) - ch_vep_ann = ENSEMBLVEP_SNV.out.vcf_gz - ch_vep_index = TABIX_VEP.out.tbi + ch_vep_ann = ENSEMBLVEP_SNV.out.vcf_gz + ch_vep_index = TABIX_VEP.out.tbi if (params.analysis_type == 'wgs') { - ENSEMBLVEP_SNV.out.vcf_gz - .join(TABIX_VEP.out.tbi) + ch_vep_ann + .join(ch_vep_index) .groupTuple() .map { meta, vcfs, tbis -> def sortedvcfs = vcfs.sort { it.baseName } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eb917010..ea6039a3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -14,6 +14,7 @@ def checkPathParamList = [ params.bwa, params.bwamem2, params.call_interval, + params.cadd_annotation, params.fasta, params.fasta_fai, params.gens_gnomad_pos, @@ -140,6 +141,8 @@ workflow RAREDISEASE { } // Initialize all file channels including unprocessed vcf, bed and tab files + ch_cadd_scores = params.cadd_annotation ? Channel.fromPath(params.cadd_annotation).collect() + : Channel.value([]) ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() : Channel.value([]) ch_genome_fasta_no_meta = params.fasta ? Channel.fromPath(params.fasta).collect() @@ -448,6 +451,7 @@ workflow RAREDISEASE { ANNOTATE_SNVS ( ch_vcf, params.analysis_type, + ch_cadd_scores, ch_vcfanno_resources, ch_vcfanno_lua, ch_vcfanno_toml, From e1fbab6b6f2a77f5e4cd4eeaa244d421079c974f Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sun, 2 Apr 2023 23:32:10 +0200 Subject: [PATCH 004/136] add cadd subworkflow --- assets/cadd_to_vcf_header_-1.0-.txt | 1 + conf/modules/annotate_cadd.config | 16 +++++++-- conf/modules/scatter_genome.config | 4 +-- subworkflows/local/annotate_cadd.nf | 41 +++++++++++++++++++---- subworkflows/local/annotate_snvs.nf | 50 +++++++++++++++++------------ workflows/raredisease.nf | 2 ++ 6 files changed, 82 insertions(+), 32 deletions(-) create mode 100644 assets/cadd_to_vcf_header_-1.0-.txt diff --git a/assets/cadd_to_vcf_header_-1.0-.txt b/assets/cadd_to_vcf_header_-1.0-.txt new file mode 100644 index 00000000..5d244377 --- /dev/null +++ b/assets/cadd_to_vcf_header_-1.0-.txt @@ -0,0 +1 @@ +##INFO= diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index c6827584..de1fd8ce 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -12,7 +12,7 @@ */ // -// CADD annotation +// CADD annotation ext.when = { !(workflow.profile.contains("test")) } // process { @@ -22,7 +22,19 @@ process { } withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:CADD' { - ext.when = { !(workflow.profile.contains("test")) } ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } } + + withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:CADD' { + ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } + } + + withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:TABIX_CADD' { + ext.args = { "--force --sequence 1 --begin 2 --end 2" } + } + + withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { + ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD" } + ext.prefix = { "${input.simpleName}_rohann_vcfanno_filter_cadd" } + } } diff --git a/conf/modules/scatter_genome.config b/conf/modules/scatter_genome.config index f8ecf792..b2fe363a 100644 --- a/conf/modules/scatter_genome.config +++ b/conf/modules/scatter_genome.config @@ -17,12 +17,12 @@ process { withName: '.*SCATTER_GENOME:BUILD_BED' { - ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} + ext.when = { !params.skip_snv_annotation } } withName: '.*SCATTER_GENOME:GATK4_SPLITINTERVALS' { ext.args = { "--subdivision-mode BALANCING_WITHOUT_INTERVAL_SUBDIVISION --scatter-count 22" } - ext.when = { !params.skip_snv_annotation && !(params.analysis_type == "wes")} + ext.when = { !params.skip_snv_annotation } ext.prefix = { "${meta.id}_genome_intervals" } publishDir = [ enabled: params.save_reference, diff --git a/subworkflows/local/annotate_cadd.nf b/subworkflows/local/annotate_cadd.nf index 2f332bcd..6bf1b533 100644 --- a/subworkflows/local/annotate_cadd.nf +++ b/subworkflows/local/annotate_cadd.nf @@ -2,25 +2,52 @@ // A subworkflow to annotate snvs // -include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' -include { CADD } from '../../modules/local/cadd' +include { BCFTOOLS_ANNOTATE } from '../../modules/nf-core/bcftools/annotate/main' +include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' +include { CADD } from '../../modules/local/cadd' +include { TABIX_TABIX as TABIX_ANNOTATE } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_CADD } from '../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_VIEW } from '../../modules/nf-core/tabix/tabix/main' workflow ANNOTATE_CADD { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcfs) ] ch_index // channel: [mandatory] [ val(meta), path(tbis) ] - ch_cadd_scores // channel: [mandatory] [ val(meta), path(dir) ] + ch_header // channel: [mandatory] [ path(txt) ] + ch_cadd_scores // channel: [mandatory] [ path(dir) ] main: ch_versions = Channel.empty() - BCFTOOLS_VIEW(ch_vcf.join(ch_index),[],[],[]) + BCFTOOLS_VIEW(ch_vcf.join(ch_index), [], [], []) + + TABIX_VIEW(BCFTOOLS_VIEW.out.vcf) CADD(BCFTOOLS_VIEW.out.vcf, ch_cadd_scores) + TABIX_CADD(CADD.out.tsv) + + BCFTOOLS_VIEW.out.vcf + .join(TABIX_VIEW.out.tbi) + .join(CADD.out.tsv) + .join(TABIX_CADD.out.tbi) + .groupTuple() + .set { ch_annotate_in } + + BCFTOOLS_ANNOTATE(ch_annotate_in, ch_header) + + TABIX_ANNOTATE (BCFTOOLS_ANNOTATE.out.vcf) + + ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions.first()) + ch_versions = ch_versions.mix(TABIX_VIEW.out.versions.first()) + ch_versions = ch_versions.mix(CADD.out.versions.first()) + ch_versions = ch_versions.mix(TABIX_CADD.out.versions.first()) + ch_versions = ch_versions.mix(BCFTOOLS_ANNOTATE.out.versions.first()) + ch_versions = ch_versions.mix(TABIX_ANNOTATE.out.versions.first()) + emit: - vcf_ann = Channel.empty() // channel: [ val(meta), path(vcf) ] - // tbi = ch_vep_index // channel: [ val(meta), path(tbi) ] - // versions = ch_versions // channel: [ path(versions.yml) ] + vcf = BCFTOOLS_ANNOTATE.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = TABIX_ANNOTATE.out.tbi // channel: [ val(meta), path(tbi) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 9fca95f5..ad05012b 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -21,6 +21,7 @@ workflow ANNOTATE_SNVS { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] analysis_type // string: [mandatory] 'wgs' or 'wes' + ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_scores // channel: [mandatory] [ path(annotation) ] ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] @@ -68,18 +69,26 @@ workflow ANNOTATE_SNVS { TABIX_BCFTOOLS_VIEW (BCFTOOLS_VIEW.out.vcf) - BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS_VIEW.out.tbi).collect().set { ch_vcf_scatter_in } + BCFTOOLS_VIEW.out.vcf.join(TABIX_BCFTOOLS_VIEW.out.tbi) + .collect() + .combine(ch_split_intervals) + .map { + meta, vcf, tbi, interval -> + return [meta + [scatterid:interval.baseName], vcf, tbi, interval] + } + .set { ch_vcf_scatter_in } - GATK4_SELECTVARIANTS (ch_vcf_scatter_in.combine(ch_split_intervals)) + GATK4_SELECTVARIANTS (ch_vcf_scatter_in) ANNOTATE_CADD ( GATK4_SELECTVARIANTS.out.vcf, GATK4_SELECTVARIANTS.out.tbi, + ch_cadd_header, ch_cadd_scores ) ENSEMBLVEP_SNV( - GATK4_SELECTVARIANTS.out.vcf, + ANNOTATE_CADD.out.vcf, val_vep_genome, "homo_sapiens", val_vep_cache_version, @@ -88,30 +97,29 @@ workflow ANNOTATE_SNVS { [] ) - TABIX_VEP (ENSEMBLVEP_SNV.out.vcf_gz) + ENSEMBLVEP_SNV.out.vcf_gz + .map { meta, vcf -> [meta - meta.subMap('scatterid'), vcf] } + .set { ch_vep_out } - ch_vep_ann = ENSEMBLVEP_SNV.out.vcf_gz - ch_vep_index = TABIX_VEP.out.tbi + TABIX_VEP (ch_vep_out) - if (params.analysis_type == 'wgs') { + ch_vep_out + .join(TABIX_VEP.out.tbi) + .groupTuple() + .map { meta, vcfs, tbis -> + def sortedvcfs = vcfs.sort { it.baseName } + def sortedtbis = tbis.sort { it.baseName } + return [ meta, sortedvcfs, sortedtbis ] + } + .set { ch_concat_in } - ch_vep_ann - .join(ch_vep_index) - .groupTuple() - .map { meta, vcfs, tbis -> - def sortedvcfs = vcfs.sort { it.baseName } - def sortedtbis = tbis.sort { it.baseName } - return [ meta, sortedvcfs, sortedtbis ] - } - .set { ch_concat_in } + BCFTOOLS_CONCAT (ch_concat_in) - BCFTOOLS_CONCAT (ch_concat_in) + TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) - TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) + ch_vep_ann = BCFTOOLS_CONCAT.out.vcf + ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi - ch_vep_ann = BCFTOOLS_CONCAT.out.vcf - ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi - } ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions) ch_versions = ch_versions.mix(RHOCALL_ANNOTATE.out.versions) ch_versions = ch_versions.mix(ZIP_TABIX_ROHCALL.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index ea6039a3..755cad42 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -141,6 +141,7 @@ workflow RAREDISEASE { } // Initialize all file channels including unprocessed vcf, bed and tab files + ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() ch_cadd_scores = params.cadd_annotation ? Channel.fromPath(params.cadd_annotation).collect() : Channel.value([]) ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() @@ -451,6 +452,7 @@ workflow RAREDISEASE { ANNOTATE_SNVS ( ch_vcf, params.analysis_type, + ch_cadd_header, ch_cadd_scores, ch_vcfanno_resources, ch_vcfanno_lua, From d6cdfd43c9121db4afd6f7ddd19c514fa199d7a1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:45:31 +0200 Subject: [PATCH 005/136] add bcftools annotate --- modules.json | 5 ++ modules/nf-core/bcftools/annotate/main.nf | 64 ++++++++++++++++++++++ modules/nf-core/bcftools/annotate/meta.yml | 56 +++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 modules/nf-core/bcftools/annotate/main.nf create mode 100644 modules/nf-core/bcftools/annotate/meta.yml diff --git a/modules.json b/modules.json index fa00b5f6..092d75a1 100644 --- a/modules.json +++ b/modules.json @@ -5,6 +5,11 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "bcftools/annotate": { + "branch": "master", + "git_sha": "00567d35852dfde7e30a707b8d2e415dfa9d5970", + "installed_by": ["modules"] + }, "bcftools/concat": { "branch": "master", "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf new file mode 100644 index 00000000..c529f2c2 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -0,0 +1,64 @@ +process BCFTOOLS_ANNOTATE { + tag "$meta.id" + label 'process_low' + + conda "bioconda::bcftools=1.16" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': + 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + + input: + tuple val(meta), path(input), path(index), path(annotations), path(annotations_index) + path(header_lines) + + output: + tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.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 header_file = header_lines ? "--header-lines ${header_lines}" : '' + def annotations_file = annotations ? "--annotations ${annotations}" : '' + 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" + if ("$input" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" + """ + bcftools \\ + annotate \\ + $args \\ + $annotations_file \\ + $header_file \\ + --output ${prefix}.${extension} \\ + --threads $task.cpus \\ + $input + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$( bcftools --version |& sed '1!d; s/^.*bcftools //' ) + 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" + """ + touch ${prefix}.${extension} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bcftools: \$( bcftools --version |& sed '1!d; s/^.*bcftools //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/bcftools/annotate/meta.yml b/modules/nf-core/bcftools/annotate/meta.yml new file mode 100644 index 00000000..60f053ea --- /dev/null +++ b/modules/nf-core/bcftools/annotate/meta.yml @@ -0,0 +1,56 @@ +name: bcftools_annotate +description: Add or remove annotations. +keywords: + - bcftools + - annotate + - vcf + - remove + - add +tools: + - annotate: + description: Add or remove annotations. + homepage: http://samtools.github.io/bcftools/bcftools.html + documentation: https://samtools.github.io/bcftools/bcftools.html#annotate + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: Query VCF or BCF file, can be either uncompressed or compressed + - index: + type: file + description: Index of the query VCF or BCF file + - annotations: + type: file + description: Bgzip-compressed file with annotations + - annotations_index: + type: file + description: Index of the annotations file + - header_lines: + type: file + description: Contains lines to append to the output VCF header + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - vcf: + type: file + description: Compressed annotated VCF file + pattern: "*{vcf,vcf.gz,bcf,bcf.gz}" + +authors: + - "@projectoriented" + - "@ramprasadn" From 364a25db3f6938adf60899b80dac7925bd614214 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:51:03 +0200 Subject: [PATCH 006/136] update cadd subworkflow --- subworkflows/local/annotate_snvs.nf | 2 +- subworkflows/local/{ => annotation}/annotate_cadd.nf | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) rename subworkflows/local/{ => annotation}/annotate_cadd.nf (74%) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index ad05012b..e3c4d55f 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -14,7 +14,7 @@ include { TABIX_TABIX as TABIX_VEP } from '../../modules/nf-core/ta include { TABIX_TABIX as TABIX_BCFTOOLS_CONCAT } from '../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_BCFTOOLS_VIEW } from '../../modules/nf-core/tabix/tabix/main' include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariants/main' -include { ANNOTATE_CADD } from '../../subworkflows/local/annotate_cadd' +include { ANNOTATE_CADD } from './annotation/annotate_cadd' workflow ANNOTATE_SNVS { diff --git a/subworkflows/local/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf similarity index 74% rename from subworkflows/local/annotate_cadd.nf rename to subworkflows/local/annotation/annotate_cadd.nf index 6bf1b533..d0d77cd2 100644 --- a/subworkflows/local/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -2,12 +2,12 @@ // A subworkflow to annotate snvs // -include { BCFTOOLS_ANNOTATE } from '../../modules/nf-core/bcftools/annotate/main' -include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' -include { CADD } from '../../modules/local/cadd' -include { TABIX_TABIX as TABIX_ANNOTATE } from '../../modules/nf-core/tabix/tabix/main' -include { TABIX_TABIX as TABIX_CADD } from '../../modules/nf-core/tabix/tabix/main' -include { TABIX_TABIX as TABIX_VIEW } from '../../modules/nf-core/tabix/tabix/main' +include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' +include { BCFTOOLS_VIEW } from '../../../modules/nf-core/bcftools/view/main' +include { CADD } from '../../../modules/local/cadd' +include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_CADD } from '../../../modules/nf-core/tabix/tabix/main' +include { TABIX_TABIX as TABIX_VIEW } from '../../../modules/nf-core/tabix/tabix/main' workflow ANNOTATE_CADD { From ce263058d89cb6d73ea1cf071b83c3ce3731efcb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Apr 2023 16:23:25 +0200 Subject: [PATCH 007/136] update annotate options --- conf/modules/annotate_cadd.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index de1fd8ce..0bd5469d 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -34,7 +34,7 @@ process { } withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { - ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD" } + ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } ext.prefix = { "${input.simpleName}_rohann_vcfanno_filter_cadd" } } } From 3357035378830cc35c1a31add8fabc3a07b842d2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 3 Apr 2023 17:01:14 +0200 Subject: [PATCH 008/136] update config --- conf/modules/annotate_cadd.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index 0bd5469d..953930fd 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -16,24 +16,24 @@ // process { - withName: '.*ANNOTATE_SNVS:ANNOTATE_CADD:BCFTOOLS_VIEW' { + withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { ext.args = { "--output-type z --types indels" } ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_indels" } } - withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:CADD' { + withName: '.*:ANNOTATE_CADD:CADD' { ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } } - withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:CADD' { + withName: '.*:ANNOTATE_CADD:CADD' { ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } } - withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:TABIX_CADD' { + withName: '.*:ANNOTATE_CADD:TABIX_CADD' { ext.args = { "--force --sequence 1 --begin 2 --end 2" } } - withName: '.*:ANNOTATE_SNVS:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { + withName: '.*:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } ext.prefix = { "${input.simpleName}_rohann_vcfanno_filter_cadd" } } From cf00edb3835b645138c7972a3a65f6c88016b805 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Apr 2023 00:50:11 +0200 Subject: [PATCH 009/136] add to mt subworkflow --- conf/modules/annotate_cadd.config | 17 ++++---- subworkflows/local/analyse_MT.nf | 4 ++ subworkflows/local/annotate_snvs.nf | 18 ++++++++- .../local/mitochondria/merge_annotate_MT.nf | 40 ++++++++++++++++--- workflows/raredisease.nf | 2 + 5 files changed, 67 insertions(+), 14 deletions(-) diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index 953930fd..5c510214 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -12,21 +12,22 @@ */ // -// CADD annotation ext.when = { !(workflow.profile.contains("test")) } +// CADD annotation // process { - withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { - ext.args = { "--output-type z --types indels" } - ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_indels" } + withName: '.*:ANNOTATE_CADD.*' { + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } } - withName: '.*:ANNOTATE_CADD:CADD' { - ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } + withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { + ext.args = { "--output-type z --types indels" } + ext.prefix = { "${vcf.simpleName}_indels" } } withName: '.*:ANNOTATE_CADD:CADD' { - ext.prefix = { "${vcf.simpleName}_rohann_vcfanno_filter_cadd" } + ext.args = { "-g ${params.genome}" } + ext.prefix = { "${vcf.simpleName}_cadd" } } withName: '.*:ANNOTATE_CADD:TABIX_CADD' { @@ -35,6 +36,6 @@ process { withName: '.*:ANNOTATE_CADD:BCFTOOLS_ANNOTATE' { ext.args = { "--columns Chrom,Pos,Ref,Alt,-,CADD --output-type z" } - ext.prefix = { "${input.simpleName}_rohann_vcfanno_filter_cadd" } + ext.prefix = { "${input.simpleName}_ann" } } } diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 0ad82f1a..a4c2cd26 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -10,6 +10,8 @@ include { MERGE_ANNOTATE_MT } from './mitochondria/me workflow ANALYSE_MT { take: ch_bam // channel: [mandatory] [ val(meta), file(bam), file(bai) ] + ch_cadd_header // channel: [mandatory] [ path(txt) ] + ch_cadd_scores // channel: [mandatory] [ path(annotation) ] ch_genome_bwa_index // channel: [mandatory] [ path(index) ] ch_genome_bwamem2_index // channel: [mandatory] [ path(index) ] ch_genome_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] @@ -78,6 +80,8 @@ workflow ANALYSE_MT { MERGE_ANNOTATE_MT( ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, + ch_cadd_header, + ch_cadd_scores, ch_genome_fasta_no_meta, ch_genome_dict_meta, ch_genome_dict_no_meta, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index e3c4d55f..74da97de 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -80,6 +80,7 @@ workflow ANNOTATE_SNVS { GATK4_SELECTVARIANTS (ch_vcf_scatter_in) + // Annotating with CADD ANNOTATE_CADD ( GATK4_SELECTVARIANTS.out.vcf, GATK4_SELECTVARIANTS.out.tbi, @@ -87,8 +88,22 @@ workflow ANNOTATE_SNVS { ch_cadd_scores ) + // Pick input for VEP + GATK4_SELECTVARIANTS.out.vcf + .combine(ANNOTATE_CADD.out.vcf.ifEmpty("null")) + .branch { it -> + selvar: it[2].equals("null") + return [it[0], it[1]] + cadd: !(it[2].equals("null")) + return [it[2], it[3]] + } + .set { ch_for_mix } + + ch_vep_in = ch_for_mix.selvar.mix(ch_for_mix.cadd) + + // Annotating with ensembl Vep ENSEMBLVEP_SNV( - ANNOTATE_CADD.out.vcf, + ch_vep_in, val_vep_genome, "homo_sapiens", val_vep_cache_version, @@ -128,6 +143,7 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_VIEW.out.versions) ch_versions = ch_versions.mix(GATK4_SELECTVARIANTS.out.versions.first()) + ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_SNV.out.versions.first()) ch_versions = ch_versions.mix(TABIX_VEP.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 33886f4e..d904f500 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -9,16 +9,20 @@ include { TABIX_TABIX as TABIX_TABIX_MT } from '../../.. include { BCFTOOLS_NORM as REMOVE_DUPLICATES_MT } from '../../../modules/nf-core/bcftools/norm/main' include { TABIX_TABIX as TABIX_TABIX_MT2 } from '../../../modules/nf-core/tabix/tabix/main' include { BCFTOOLS_MERGE as BCFTOOLS_MERGE_MT } from '../../../modules/nf-core/bcftools/merge/main' +include { TABIX_TABIX as TABIX_TABIX_MERGE } from '../../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_TABIX_MT3 } from '../../../modules/nf-core/tabix/tabix/main' include { ENSEMBLVEP as ENSEMBLVEP_MT } from '../../../modules/local/ensemblvep/main' include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../../modules/nf-core/haplogrep2/classify/main' include { VCFANNO as VCFANNO_MT } from '../../../modules/nf-core/vcfanno/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO } from '../../../modules/nf-core/tabix/bgziptabix/main' +include { ANNOTATE_CADD } from '../annotation/annotate_cadd' workflow MERGE_ANNOTATE_MT { take: ch_vcf1 // channel: [mandatory] [ val(meta), path(vcf) ] ch_vcf2 // channel: [mandatory] [ val(meta), path(vcf) ] + ch_cadd_header // channel: [mandatory] [ path(txt) ] + ch_cadd_scores // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ path(fasta) ] ch_genome_dict_meta // channel: [mandatory] [ val(meta), path(dict) ] ch_genome_dict_no_meta // channel: [mandatory] [ path(dict) ] @@ -83,18 +87,43 @@ workflow MERGE_ANNOTATE_MT { [], ch_genome_fasta, ch_genome_fai) - ch_merged_vcf = BCFTOOLS_MERGE_MT.out.merged_variants - ch_in_vep = ch_merged_vcf.mix(ch_case_vcf.single) + BCFTOOLS_MERGE_MT.out.merged_variants + .mix(ch_case_vcf.single) + .set { ch_annotation_in } + + TABIX_TABIX_MERGE(ch_annotation_in) + + // Annotating with CADD + ANNOTATE_CADD ( + ch_annotation_in, + TABIX_TABIX_MERGE.out.tbi, + ch_cadd_header, + ch_cadd_scores + ) + + // Pick input for vep + ch_annotation_in + .combine(ANNOTATE_CADD.out.vcf.ifEmpty("null")) + .branch { it -> + merged: it[2].equals("null") + return [it[0], it[1]] + cadd: !(it[2].equals("null")) + return [it[2], it[3]] + } + .set { ch_for_mix } + ch_vep_in = ch_for_mix.merged.mix(ch_for_mix.cadd) // Annotating with ensembl Vep - ENSEMBLVEP_MT( ch_in_vep, + ENSEMBLVEP_MT( + ch_vep_in, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, ch_genome_fasta, - []) + [] + ) // Running vcfanno TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) @@ -107,13 +136,14 @@ workflow MERGE_ANNOTATE_MT { ch_tbi_out = ZIP_TABIX_VCFANNO.out.gz_tbi.map{meta, vcf, tbi -> return [meta, tbi] } // Running haplogrep2 - HAPLOGREP2_CLASSIFY_MT(ch_in_vep, "vcf.gz") + HAPLOGREP2_CLASSIFY_MT(ch_vep_in, "vcf.gz") ch_versions = ch_versions.mix(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_VARIANTFILTRATION_MT.out.versions.first()) ch_versions = ch_versions.mix(SPLIT_MULTIALLELICS_MT.out.versions.first()) ch_versions = ch_versions.mix(REMOVE_DUPLICATES_MT.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_MERGE_MT.out.versions) + ch_versions = ch_versions.mix(ANNOTATE_CADD.out.versions) ch_versions = ch_versions.mix(ENSEMBLVEP_MT.out.versions) ch_versions = ch_versions.mix(VCFANNO_MT.out.versions) ch_versions = ch_versions.mix(HAPLOGREP2_CLASSIFY_MT.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 755cad42..a3bdb7b0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -405,6 +405,8 @@ workflow RAREDISEASE { if (!params.skip_mt_analysis) { ANALYSE_MT ( ch_mapped.bam_bai, + ch_cadd_header, + ch_cadd_scores, ch_bwa_index, ch_bwamem2_index, ch_genome_fasta_meta, From 988e3ea3bc2e7f4471e973f1cc7e7769d2ec04cc Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Apr 2023 01:36:17 +0200 Subject: [PATCH 010/136] update when --- CITATIONS.md | 6 ++++++ conf/modules/annotate_cadd.config | 2 +- nextflow.config | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index b4bc88d1..ec755b55 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -22,6 +22,12 @@ > Vasimuddin Md, Misra S, Li H, Aluru S. Efficient Architecture-Aware Acceleration of BWA-MEM for Multicore Systems. In: 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS). IEEE; 2019:314-324. doi:10.1109/IPDPS.2019.00041 +- [CADD1](https://genomemedicine.biomedcentral.com/articles/10.1186/s13073-021-00835-9), [2](https://academic.oup.com/nar/article/47/D1/D886/5146191) + + > Rentzsch P, Schubach M, Shendure J, Kircher M. CADD-Splice—improving genome-wide variant effect prediction using deep learning-derived splice scores. Genome Med. 2021;13(1):31. doi:10.1186/s13073-021-00835-9 + + > Rentzsch P, Witten D, Cooper GM, Shendure J, Kircher M. CADD: predicting the deleteriousness of variants throughout the human genome. Nucleic Acids Research. 2019;47(D1):D886-D894. doi:10.1093/nar/gky1016 + - [DeepVariant](https://www.nature.com/articles/nbt.4235) > Poplin R, Chang PC, Alexander D, et al. A universal SNP and small-indel variant caller using deep neural networks. Nat Biotechnol. 2018;36(10):983-987. doi:10.1038/nbt.4235 diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index 5c510214..309e3408 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -17,7 +17,7 @@ process { withName: '.*:ANNOTATE_CADD.*' { - ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } + ext.when = { !(params.cadd_annotation == null) || !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } } withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { diff --git a/nextflow.config b/nextflow.config index 39ba2245..ab2e058d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,6 +26,7 @@ params { skip_sv_annotation = false skip_mt_analysis = false gens_switch = false + cadd_annotation = null platform = 'illumina' // Alignment From 886c3b2b4b62eb1399808605b10632c6dd5a6ebd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Apr 2023 02:14:55 +0200 Subject: [PATCH 011/136] add cadd nf-core --- conf/modules/annotate_cadd.config | 4 +- modules.json | 5 ++ .../{local/cadd.nf => nf-core/cadd/main.nf} | 0 modules/nf-core/cadd/meta.yml | 48 +++++++++++++++++++ .../local/annotation/annotate_cadd.nf | 2 +- 5 files changed, 56 insertions(+), 3 deletions(-) rename modules/{local/cadd.nf => nf-core/cadd/main.nf} (100%) create mode 100644 modules/nf-core/cadd/meta.yml diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index 309e3408..e2962a50 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -17,8 +17,8 @@ process { withName: '.*:ANNOTATE_CADD.*' { - ext.when = { !(params.cadd_annotation == null) || !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } - } + ext.when = { (params.cadd_annotation != null) && ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } + } withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { ext.args = { "--output-type z --types indels" } diff --git a/modules.json b/modules.json index 092d75a1..2ed3a685 100644 --- a/modules.json +++ b/modules.json @@ -60,6 +60,11 @@ "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, + "cadd": { + "branch": "master", + "git_sha": "2e2f8581f4d2ab4729c2b7bd5da8400b54fb8fdf", + "installed_by": ["modules"] + }, "cat/cat": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", diff --git a/modules/local/cadd.nf b/modules/nf-core/cadd/main.nf similarity index 100% rename from modules/local/cadd.nf rename to modules/nf-core/cadd/main.nf diff --git a/modules/nf-core/cadd/meta.yml b/modules/nf-core/cadd/meta.yml new file mode 100644 index 00000000..0dd0fb26 --- /dev/null +++ b/modules/nf-core/cadd/meta.yml @@ -0,0 +1,48 @@ +name: "cadd" +description: CADD is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. +keywords: + - cadd + - annotate +tools: + - "cadd": + description: "CADD scripts release for offline scoring" + homepage: "https://cadd.gs.washington.edu/" + documentation: "https://github.com/kircherlab/CADD-scripts/blob/master/README.md" + tool_dev_url: "https://github.com/kircherlab/CADD-scripts/" + doi: "10.1093/nar/gky1016" + licence: "['Restricted. Free for non-commercial users.']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: Input file for annotation in vcf or vcf.gz format + pattern: "*.{vcf,vcf.gz}" + - annotation_dir: + type: file + description: | + Path to folder containing the vcf files with precomputed CADD scores. + This folder contains the uncompressed files that would otherwise be in data/annotation folder as described in https://github.com/kircherlab/CADD-scripts/#manual-installation. + pattern: "*.{vcf,vcf.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - tsv: + type: file + description: Annotated tsv file + pattern: "*.{tsv,tsv.gz}" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/annotation/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf index d0d77cd2..0a00362e 100644 --- a/subworkflows/local/annotation/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -4,7 +4,7 @@ include { BCFTOOLS_ANNOTATE } from '../../../modules/nf-core/bcftools/annotate/main' include { BCFTOOLS_VIEW } from '../../../modules/nf-core/bcftools/view/main' -include { CADD } from '../../../modules/local/cadd' +include { CADD } from '../../../modules/nf-core/cadd/main' include { TABIX_TABIX as TABIX_ANNOTATE } from '../../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_CADD } from '../../../modules/nf-core/tabix/tabix/main' include { TABIX_TABIX as TABIX_VIEW } from '../../../modules/nf-core/tabix/tabix/main' From df3986d9810d422f137d453d7e96e6b54c749731 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Apr 2023 02:24:19 +0200 Subject: [PATCH 012/136] fix editorlint err --- conf/modules/annotate_cadd.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index e2962a50..a5be41d0 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -18,7 +18,7 @@ process { withName: '.*:ANNOTATE_CADD.*' { ext.when = { (params.cadd_annotation != null) && ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } - } + } withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { ext.args = { "--output-type z --types indels" } From 92cabc7bbca6124eee909c9734e4d85b091725e9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Apr 2023 22:50:22 +0200 Subject: [PATCH 013/136] update usage docs --- docs/usage.md | 4 ++++ subworkflows/local/annotation/annotate_cadd.nf | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index 65e13464..07f598ca 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -196,6 +196,7 @@ The mandatory and optional parameters for each category are tabulated below. | vcfanno_toml3 | vcfanno_lua | | vep_cache_version | vep_filters6 | | vep_cache | score_config_snv7 | +| | cadd_annotation8 | 1Genome version is used by VEP. You have the option to choose between GRCh37 and GRCh38.
2Path to VCF files and their indices used by vcfanno. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_resources.txt).
@@ -204,6 +205,9 @@ The mandatory and optional parameters for each category are tabulated below. 5Used by GENMOD while modeling the variants. Contains a list of loci that show [reduced penetrance](https://medlineplus.gov/genetics/understanding/inheritance/penetranceexpressivity/) in people. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/reduced_penetrance.tsv).
6 This file contains a list of candidate genes (with [HGNC](https://www.genenames.org/) IDs) that is used to split the variants into canditate variants and research variants. Research variants contain all the variants, while candidate variants are a subset of research variants and are associated with candidate genes. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/hgnc.txt).
7Used by GENMOD for ranking the variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/rank_model_snv.ini).
+8Path to a folder containing cadd annotations. Equivalent of the data/annotations/ folder described [here](https://github.com/kircherlab/CADD-scripts/#manual-installation), and it is used to calculate CADD scores for small indels.
+ +> NB: We use CADD only to annotate small indels. To annotate SNVs with precomputed CADD scores, pass the file containing CADD scores as a resource to vcfanno instead. Files containing the precomputed CADD scores for SNVs can be downloaded from [here](https://cadd.gs.washington.edu/download) (description: "All possible SNVs of GRCh3<7/8>/hg3<7/8>") ##### 7. SV annotation & Ranking diff --git a/subworkflows/local/annotation/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf index 0a00362e..f75fb18d 100644 --- a/subworkflows/local/annotation/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -28,8 +28,8 @@ workflow ANNOTATE_CADD { TABIX_CADD(CADD.out.tsv) - BCFTOOLS_VIEW.out.vcf - .join(TABIX_VIEW.out.tbi) + ch_vcf + .join(ch_index) .join(CADD.out.tsv) .join(TABIX_CADD.out.tbi) .groupTuple() From 0df747cffebb63afa672ca1a8f113a7ae5d365a5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Apr 2023 00:57:00 +0200 Subject: [PATCH 014/136] update output --- docs/output.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index bafda861..39f03012 100644 --- a/docs/output.md +++ b/docs/output.md @@ -40,6 +40,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Annotation - SNV](#annotation---snv) - [bcftools roh](#bcftools-roh) - [vcfanno](#vcfanno) + - [CADD](#cadd) - [VEP](#vep) - [Annotation - SV](#annotation---sv) - [SVDB query](#svdb-query) @@ -296,7 +297,13 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. #### vcfanno -[vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple conf file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder by default, and is passed to vep for further annotation. +[vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple conf file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder by default, and is passed to CADD and/or VEP for further annotation. + +We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files can be downloaded from [here](https://cadd.gs.washington.edu/download)). + +#### CADD + +[CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder by default, and is passed to VEP for further annotation. #### VEP From 4ea822e1efe742d17a74208e4e3d396e227377ce Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Apr 2023 01:06:29 +0200 Subject: [PATCH 015/136] update readme and output --- README.md | 2 ++ docs/output.md | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index a55e0d37..ebe7aea5 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - [bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) - [vcfanno](https://github.com/brentp/vcfanno) +- [CADD](https://cadd.gs.washington.edu/) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) **6. Annotation - SV:** @@ -72,6 +73,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - Annotation: - [HaploGrep2](https://github.com/seppinho/haplogrep-cmd) - [vcfanno](https://github.com/brentp/vcfanno) + - [CADD](https://cadd.gs.washington.edu/) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) **8. Variant calling - repeat expansions:** diff --git a/docs/output.md b/docs/output.md index 39f03012..5c890d9c 100644 --- a/docs/output.md +++ b/docs/output.md @@ -378,6 +378,12 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen [vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple conf file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder by default, and is passed to vep for further annotation. +We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files can be downloaded from [here](https://cadd.gs.washington.edu/download)). + +#### CADD + +[CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder by default, and is passed to VEP for further annotation. + ##### VEP [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) determines the effect of your variants on genes, transcripts, and protein sequence, as well as regulatory regions. From 58d65ba1d657d57f52744ccbfe89c918110d0819 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Wed, 12 Apr 2023 16:53:17 +0200 Subject: [PATCH 016/136] Install nf-core modules --- modules/local/gatk4/germlinecnvcaller/main.nf | 63 --------------- .../nf-core/gatk4/annotateintervals/main.nf | 68 ++++++++++++++++ .../nf-core/gatk4/annotateintervals/meta.yml | 77 ++++++++++++++++++ .../nf-core/gatk4/collectreadcounts/main.nf | 68 ++++++++++++++++ .../nf-core/gatk4/collectreadcounts/meta.yml | 72 +++++++++++++++++ .../determinegermlinecontigploidy/main.nf | 79 +++++++++++++++++++ .../determinegermlinecontigploidy/meta.yml | 71 +++++++++++++++++ modules/nf-core/gatk4/filterintervals/main.nf | 58 ++++++++++++++ .../gatk4/filterintervals}/meta.yml | 33 ++++---- .../nf-core/gatk4/preprocessintervals/main.nf | 57 +++++++++++++ .../gatk4/preprocessintervals/meta.yml | 59 ++++++++++++++ 11 files changed, 626 insertions(+), 79 deletions(-) delete mode 100644 modules/local/gatk4/germlinecnvcaller/main.nf create mode 100644 modules/nf-core/gatk4/annotateintervals/main.nf create mode 100644 modules/nf-core/gatk4/annotateintervals/meta.yml create mode 100644 modules/nf-core/gatk4/collectreadcounts/main.nf create mode 100644 modules/nf-core/gatk4/collectreadcounts/meta.yml create mode 100644 modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf create mode 100644 modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml create mode 100644 modules/nf-core/gatk4/filterintervals/main.nf rename modules/{local/gatk4/germlinecnvcaller => nf-core/gatk4/filterintervals}/meta.yml (65%) create mode 100644 modules/nf-core/gatk4/preprocessintervals/main.nf create mode 100644 modules/nf-core/gatk4/preprocessintervals/meta.yml diff --git a/modules/local/gatk4/germlinecnvcaller/main.nf b/modules/local/gatk4/germlinecnvcaller/main.nf deleted file mode 100644 index bdaafb19..00000000 --- a/modules/local/gatk4/germlinecnvcaller/main.nf +++ /dev/null @@ -1,63 +0,0 @@ -process GATK4_GERMLINECNVCALLER { - tag "$meta.id" - label 'process_medium' - - if(params.enable_conda){ - error "Conda environments cannot be used for GATK4/GermlineCNVCaller at the moment. Please use docker or singularity containers." - } - container "broadinstitute/gatk-nightly:2023-03-08-4.3.0.0-47-g4ba4ab590-NIGHTLY-SNAPSHOT" - - input: - tuple val(meta), path(tsv) - path intervals - path model - path ploidy - - output: - tuple val(meta), path("*.tar.gz"), emit: tar_gz - 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 intervals_command = intervals ? "--intervals $intervals" : "" - def model_command = model ? "--model $model" : "" - def input_list = tsv.collect{"--input $it"}.join(' ') - - def avail_mem = 3 - if (!task.memory) { - log.info '[GATK GermlineCNVCaller] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = task.memory.giga - } - """ - gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ - $input_list \\ - --contig-ploidy-calls ${prefix}-calls \\ - --output cnv_calls/ \\ - --output-prefix $prefix \\ - $args \\ - $intervals_command \\ - $model_command - tar -czvf ${prefix}.tar.gz cnv_calls - - 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}.tar.gz - - 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/annotateintervals/main.nf b/modules/nf-core/gatk4/annotateintervals/main.nf new file mode 100644 index 00000000..34a55ffb --- /dev/null +++ b/modules/nf-core/gatk4/annotateintervals/main.nf @@ -0,0 +1,68 @@ +process GATK4_ANNOTATEINTERVALS { + tag "$meta.id" + label 'process_single' + + conda "bioconda::gatk4=4.3.0.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(intervals) + path(fasta) + path(fasta_fai) + path(dict) + path(mappable_regions) + path(mappable_regions_tbi) + path(segmental_duplication_regions) + path(segmental_duplication_regions_tbi) + + output: + tuple val(meta), path("*.tsv"), emit: annotated_intervals + 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 inputs = intervals.collect(){ "--intervals ${it}" }.join(" ") + def mappability_track = mappable_regions ? "--mappability-track ${mappable_regions}" : "" + def segmental_duplication_tracks = segmental_duplication_regions ? "--segmental-duplication-track ${segmental_duplication_regions}" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK AnnotateIntervals] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + + """ + gatk --java-options "-Xmx${avail_mem}g" AnnotateIntervals \\ + ${inputs} \\ + --reference ${fasta} \\ + --output ${prefix}.tsv \\ + ${mappability_track} \\ + ${segmental_duplication_tracks} \\ + --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}.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/annotateintervals/meta.yml b/modules/nf-core/gatk4/annotateintervals/meta.yml new file mode 100644 index 00000000..6f16c958 --- /dev/null +++ b/modules/nf-core/gatk4/annotateintervals/meta.yml @@ -0,0 +1,77 @@ +name: "gatk4_annotateintervals" +description: Annotates intervals with GC content, mappability, and segmental-duplication content +keywords: + - gatk + - annotateintervals + - intervals + - bed + - annotation +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"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - intervals: + type: file(s) + description: One or more interval files to annotate + pattern: "*.{interval_list,list,bed}" + - fasta: + type: file + description: The reference FASTA file + pattern: "*.{fasta,fa}" + - fasta_fai: + type: file + description: The index of the reference FASTA file + pattern: "*.fai" + - dict: + type: file + description: The sequence dictionary reference FASTA file + pattern: "*.dict" + - mappable_regions: + type: file + description: | + Optional - Umap single-read mappability track + The track should correspond to the appropriate read length and overlapping intervals must be merged + pattern: "*.bed(.gz)?" + - mappable_regions_tbi: + type: file + description: Optional - The index of the gzipped umap single-read mappability track + pattern: "*.bed.gz.tbi" + - segmental_duplication_regions: + type: file + description: Optional - Segmental-duplication track + pattern: "*.bed(.gz)?" + - segmental_duplication_regions_tbi: + type: file + description: Optional - The index of the gzipped segmental-duplication track + pattern: "*.bed.gz.tbi" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - annotated_intervals: + type: file + description: The output TSV file with a SAM-style header containing the annotated intervals + pattern: "*.tsv" + +authors: + - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/collectreadcounts/main.nf b/modules/nf-core/gatk4/collectreadcounts/main.nf new file mode 100644 index 00000000..37a90da0 --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/main.nf @@ -0,0 +1,68 @@ +process GATK4_COLLECTREADCOUNTS { + tag "$meta.id" + label 'process_medium' + + conda "bioconda::gatk4=4.3.0.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(input), path(input_index), path(intervals) + path(fasta) + path(fai) + path(dict) + + output: + tuple val(meta), path("*.hdf5"), optional: true, emit: hdf5 + tuple val(meta), path("*.tsv") , optional: true, 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}" + + def reference = fasta ? "--reference $fasta" : "" + def extension = args.contains("--format HDF5") ? "hdf5" : + args.contains("--format TSV") ? "tsv" : + "hdf5" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK COLLECTREADCOUNTS] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ + --input $input \\ + --intervals $intervals \\ + --output ${prefix}.$extension \\ + $reference \\ + --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 args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def extension = args.contains("--format HDF5") ? "hdf5" : + args.contains("--format TSV") ? "tsv" : + "hdf5" + """ + touch ${prefix}.${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/collectreadcounts/meta.yml b/modules/nf-core/gatk4/collectreadcounts/meta.yml new file mode 100644 index 00000000..1dbddc59 --- /dev/null +++ b/modules/nf-core/gatk4/collectreadcounts/meta.yml @@ -0,0 +1,72 @@ +name: "gatk4_collectreadcounts" +description: Collects read counts at specified intervals. The count for each interval is calculated by counting the number of read starts that lie in the interval. +keywords: + - bam + - cram + - CollectReadCounts + - gatk + - gatk4 +tools: + - gatk4: + description: + Genome Analysis Toolkit (GATK4). 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/360037593911-CombineGVCFs + tool_dev_url: https://github.com/broadinstitute/gatk + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - bai: + type: file + description: BAM/CRAM/SAM index file + pattern: "*.{bai,crai,sai}" + - intervals: + type: file + description: A file containing the specified intervals + pattern: "*.{bed,intervals}" + - fasta: + type: file + description: Optional - Reference FASTA + pattern: "*.{fasta,fa}" + - fai: + type: file + description: Optional - Index of the reference FASTA file + pattern: "*.fai" + - dict: + type: file + description: Optional - Sequence dictionary of the reference FASTA file + pattern: "*.dict" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - hdf5: + type: file + description: The read counts in hdf5 format + pattern: "*.hdf5" + - tsv: + type: file + description: The read counts in TSV format + pattern: "*.tsv" + +authors: + - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf new file mode 100644 index 00000000..2d630bba --- /dev/null +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf @@ -0,0 +1,79 @@ +process GATK4_DETERMINEGERMLINECONTIGPLOIDY { + tag "$meta.id" + label 'process_single' + + //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 + container "broadinstitute/gatk:4.4.0.0" //Biocontainers is missing a package + + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "GATK4_DETERMINEGERMLINECONTIGPLOIDY module does not support Conda. Please use Docker / Singularity / Podman instead." + } + + input: + tuple val(meta), path(counts), path(bed), path(exclude_beds) + path(contig_ploidy_table) + path(ploidy_model) + + output: + tuple val(meta), path("*-calls.tar.gz") , emit: calls + tuple val(meta), path("*-model.tar.gz") , emit: model, 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_list = counts.collect(){"--input $it"}.join(" ") + def intervals = bed ? "--intervals ${bed}" : "" + def exclude = exclude_beds ? exclude_beds.collect(){"--exclude-intervals $it"}.join(" ") : "" + def untar_model = ploidy_model ? (ploidy_model.name.endsWith(".tar.gz") ? "tar -xzf ${ploidy_model}" : "") : "" + def tar_model = ploidy_model ? "" : "tar czf ${prefix}-model.tar.gz ${prefix}-model" + def model = ploidy_model ? (ploidy_model.name.endsWith(".tar.gz") ? "--model ${ploidy_model.toString().replace(".tar.gz","")}" : "--model ${ploidy_model}") : "" + def contig_ploidy = contig_ploidy_table ? "--contig-ploidy-priors ${contig_ploidy_table}" : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK DetermineGermlineContigPloidy] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + ${untar_model} + + gatk --java-options "-Xmx${avail_mem}M" DetermineGermlineContigPloidy \\ + ${input_list} \\ + --output ./ \\ + --output-prefix ${prefix} \\ + ${intervals} \\ + ${exclude} \\ + ${contig_ploidy} \\ + ${model} \\ + --tmp-dir . \\ + ${args} + + tar czf ${prefix}-calls.tar.gz ${prefix}-calls + ${tar_model} + + 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}-calls.tar.gz + touch ${prefix}-model.tar.gz + touch ${prefix}.tsv + touch ${prefix}2.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/determinegermlinecontigploidy/meta.yml b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml new file mode 100644 index 00000000..1a624a5d --- /dev/null +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml @@ -0,0 +1,71 @@ +name: "gatk4_determinegermlinecontigploidy" +description: Determines the baseline contig ploidy for germline samples given counts data +keywords: + - gatk4 + - determinegermlinecontigploidy + - counts + - copy number +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"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - counts: + type: file(s) + description: One or more count TSV files created with gatk/collectreadcounts + pattern: "*.tsv" + - bed: + type: file + description: Optional - A bed file containing the intervals to include in the process + pattern: "*.bed" + - exclude_beds: + type: file(s) + description: Optional - One or more bed files containing intervals to exclude from the process + pattern: "*.bed" + - contig_ploidy_table: + type: file + description: The contig ploidy priors table + pattern: "*.tsv" + - ploidy_model: + type: directory + description: | + Optional - A folder containing the ploidy model. + When a model is supplied to tool will run in CASE mode. + The folder can be tar-zipped. + pattern: "*(.tar.gz)?" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - calls: + type: directory + description: A folder containing the calls from the input files + pattern: "*.tar.gz" + - model: + type: directory + description: | + A folder containing the model from the input files. + This will only be created in COHORT mode (when no model is supplied to the process). + pattern: "*.tar.gz" + +authors: + - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/filterintervals/main.nf b/modules/nf-core/gatk4/filterintervals/main.nf new file mode 100644 index 00000000..119f9a8d --- /dev/null +++ b/modules/nf-core/gatk4/filterintervals/main.nf @@ -0,0 +1,58 @@ +process GATK4_FILTERINTERVALS { + tag "$meta.id" + label 'process_medium' + + conda "bioconda::gatk4=4.3.0.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(intervals) + path read_counts + path annotated_intervals + + output: + tuple val(meta), path("*.interval_list"), emit: interval_list + 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 annotated_command = annotated_intervals ? "--annotated-intervals $annotated_intervals" : "" + def read_counts_command = read_counts ? "--input $read_counts" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK FilterIntervals] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" FilterIntervals \\ + $annotated_command \\ + $read_counts_command \\ + --intervals $intervals \\ + --output ${prefix}.interval_list \\ + $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}.interval_list + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/local/gatk4/germlinecnvcaller/meta.yml b/modules/nf-core/gatk4/filterintervals/meta.yml similarity index 65% rename from modules/local/gatk4/germlinecnvcaller/meta.yml rename to modules/nf-core/gatk4/filterintervals/meta.yml index 3ac5068e..efd66f4a 100644 --- a/modules/local/gatk4/germlinecnvcaller/meta.yml +++ b/modules/nf-core/gatk4/filterintervals/meta.yml @@ -1,8 +1,8 @@ -name: "gatk4_germlinecnvcaller" -description: Calls copy-number variants in germline samples given their counts and the output of DetermineGermlineContigPloidy. +name: "gatk4_filterintervals" +description: Filters intervals based on annotations and/or count statistics. keywords: - - gatk - - gatk4_germlinecnvcaller + - gatk4 + - gatk4_filterintervals tools: - "gatk4": description: @@ -20,17 +20,18 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - tsv: + - read_counts: type: file - description: TSV file - pattern: "*.tsv" - - model: - type: directory - description: model directory - - tar: + description: Read counts input file + pattern: "*.{tsv, hdf5}" + - intervals: + type: file + description: Processed interval list file (processed_intervals.interval_list) + pattern: "*.interval_list" + - annotated_intervals: type: file - description: TAR file - pattern: "*.tar" + description: Annotated intervals TSV file (annotated_intervals.tsv). + pattern: "*.tsv" output: - meta: @@ -42,10 +43,10 @@ output: type: file description: File containing software versions pattern: "versions.yml" - - tar: + - interval_list: type: file - description: TAR file - pattern: "*.tar" + description: Filtered interval list file + pattern: "*.interval_list" authors: - "@ryanjameskennedy" diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf new file mode 100644 index 00000000..e89132e8 --- /dev/null +++ b/modules/nf-core/gatk4/preprocessintervals/main.nf @@ -0,0 +1,57 @@ +process GATK4_PREPROCESSINTERVALS { + tag "$fasta" + label 'process_medium' + + conda "bioconda::gatk4=4.3.0.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(exclude_intervals) + path fasta + path fai + path dict + + output: + tuple val(meta), path("*.interval_list"), emit: interval_list + 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 exclude_command = exclude_intervals ? "--exclude-intervals $exclude_intervals" : "" + + def avail_mem = 3 + if (!task.memory) { + log.info '[GATK PreprocessIntervals] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = task.memory.giga + } + """ + gatk --java-options "-Xmx${avail_mem}g" PreprocessIntervals \\ + $exclude_command \\ + --reference $fasta \\ + --output ${prefix}.interval_list \\ + $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}.interval_list + + 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/preprocessintervals/meta.yml b/modules/nf-core/gatk4/preprocessintervals/meta.yml new file mode 100644 index 00000000..ac61ec4f --- /dev/null +++ b/modules/nf-core/gatk4/preprocessintervals/meta.yml @@ -0,0 +1,59 @@ +name: "gatk4_preprocessintervals" +description: Prepares bins for coverage collection. +keywords: + - gatk4 + - preprocessintervals + - interval + - bed +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"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - exclude_intervals: + type: file + description: Interval file (bed or interval_list) with the genomic regions to be excluded from the analysis (optional) + pattern: "*.{bed,interval_list}" + - 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: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - interval_list: + type: file + description: Processed interval list file + pattern: "*.{bed,interval_list}" + +authors: + - "@ryanjameskennedy" + - "@ViktorHy" From 02eaa84f8593164bacb5f197fa850ba083b3f6c2 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Wed, 12 Apr 2023 16:55:58 +0200 Subject: [PATCH 017/136] Update and add configs --- .../modules/call_cnv_germlinecnvcaller.config | 60 +++++++++++++++++++ conf/test.config | 5 ++ 2 files changed, 65 insertions(+) create mode 100644 conf/modules/call_cnv_germlinecnvcaller.config diff --git a/conf/modules/call_cnv_germlinecnvcaller.config b/conf/modules/call_cnv_germlinecnvcaller.config new file mode 100644 index 00000000..7a912019 --- /dev/null +++ b/conf/modules/call_cnv_germlinecnvcaller.config @@ -0,0 +1,60 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Config file for defining DSL2 per module options and publishing paths +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Available keys to override module options: + ext.args = Additional arguments appended to command in module. + ext.args2 = Second set of arguments appended to command in module (multi-tool modules). + ext.args3 = Third set of arguments appended to command in module (multi-tool modules). + ext.prefix = File name prefix for output files. + ext.when = Conditional clause +---------------------------------------------------------------------------------------- +*/ + +// +// gcnvcaller calling options +// + +process { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_PREPROCESSINTERVALS*" { + publishDir = [ + enabled: false + ] + ext.args = "--padding 0 --interval-merging-rule OVERLAPPING_ONLY" + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_ANNOTATEINTERVALS*" { + publishDir = [ + enabled: false + ] + ext.args = "--interval-merging-rule OVERLAPPING_ONLY" + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_FILTERINTERVALS*" { + publishDir = [ + enabled: false + ] + ext.args = "--interval-merging-rule OVERLAPPING_ONLY" + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_INTERVALLISTTOOLS*" { + publishDir = [ + enabled: false + ] + ext.args = "--SUBDIVISION_MODE INTERVAL_COUNT --SCATTER_CONTENT 15000" + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS*" { + publishDir = [ + enabled: false + ] + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + } + + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER*" { + publishDir = [ + enabled: false + ] + ext.args = "--run-mode CASE" + } +} diff --git a/conf/test.config b/conf/test.config index 805f84d6..870d7f2f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -28,6 +28,11 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" + dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" + blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38.preprocessed.blacklisted.gcfiltered.interval_list" + ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" + plodiy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" + cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" From 349fc83b8dd3e6d4c15801a1a304eb12bf196bd8 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Wed, 12 Apr 2023 16:56:26 +0200 Subject: [PATCH 018/136] Update and add subworkflows --- .../local/call_structural_variants.nf | 21 ++++-- .../call_cnv_germlinecnvcaller.nf | 66 +++++++++++++++++++ 2 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index e5708a65..e999b301 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -2,10 +2,11 @@ // A nested subworkflow to call structural variants. // -include { CALL_SV_MANTA } from './variant_calling/call_sv_manta' -include { CALL_SV_TIDDIT } from './variant_calling/call_sv_tiddit' -include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' -include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' +include { CALL_SV_MANTA } from './variant_calling/call_sv_manta' +include { CALL_SV_TIDDIT } from './variant_calling/call_sv_tiddit' +include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' +include { CALL_CNV_GERMLINECNVCALLER } from './variant_calling/call_cnv_germlinecnvcaller' +include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -13,12 +14,18 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_bam // channel: [mandatory] [ val(meta), path(bam) ] ch_bai // channel: [mandatory] [ val(meta), path(bai) ] ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + bam_bai_2 // channel: [ val(meta), path(bam), path(bai) ] ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] ch_fasta_no_meta // channel: [mandatory] [ path(fasta) ] ch_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] + dict // channel: [ path(dict) ] + blacklist_bed // channel: [ path(blacklist_bed) ] + priors // channel: [ path(priors) ] + ploidy_model // channel: [ path(ploidy_model) ] + cnv_model // channel: [ path(cnv_model) ] main: ch_versions = Channel.empty() @@ -33,6 +40,11 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } + CALL_CNV_GERMLINECNVCALLER (bam_bai, fasta_no_meta, fai, target_bed, blacklist_bed, dict, priors, ploidy_model, cnv_model ) + .candidate_cnvs_vcf + .collect{it[1]} + .set { gcnvcaller_vcf } + //merge tiddit_vcf .combine(manta_vcf) @@ -49,6 +61,7 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) + ch_versions = ch_versions.mix(CALL_CNV_GERMLINECNVCALLER.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) emit: diff --git a/subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf new file mode 100644 index 00000000..7540e5dd --- /dev/null +++ b/subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf @@ -0,0 +1,66 @@ +#!/usr/bin/env nextflow + +nextflow.enable.dsl = 2 + +include { GATK4_PREPROCESSINTERVALS } from '../../../modules/nf-core/gatk4/preprocessintervals/main.nf' +include { GATK4_ANNOTATEINTERVALS } from '../../../modules/nf-core/gatk4/annotateintervals/main.nf' +include { GATK4_FILTERINTERVALS } from '../../../modules/nf-core/gatk4/filterintervals/main.nf' +include { GATK4_INTERVALLISTTOOLS } from '../../../modules/nf-core/gatk4/intervallisttools/main.nf' +include { GATK4_COLLECTREADCOUNTS } from '../../../modules/nf-core/gatk4/collectreadcounts/main.nf' +include { GATK4_DETERMINEGERMLINECONTIGPLOIDY } from '../../../modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf' +include { GATK4_GERMLINECNVCALLER } from '../../../modules/nf-core/gatk4/germlinecnvcaller/main.nf' +include { GATK4_POSTPROCESSGERMLINECNVCALLS } from '../../../modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf' + +workflow CALL_CNV_GERMLINECNVCALLER { + take: + bam_bai // channel: [ val(meta), path(bam), path(bai) ] + bam_bai_2 // channel: [ val(meta), path(bam), path(bai) ] + fasta_no_meta // channel: [ path(fasta_no_meta) ] + fai // channel: [ path(fai) ] + target_bed // channel: [ path(target_bed) ] + blacklist_bed // channel: [ val(meta), path(blacklist_bed) ] + dict // channel: [ path(dict) ] + priors // [ path(priors) ] + ploidy_model // channel: [ path(ploidy_model) ] + cnv_model // channel: [ path(cnv_model) ] + + main: + ch_versions = Channel.empty() + + GATK4_PREPROCESSINTERVALS ( blacklist_bed, fasta_no_meta, fai, dict ) + + GATK4_ANNOTATEINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, fasta_no_meta, fai, dict, [], [], [], []) + + inputs = bam_bai.combine( GATK4_PREPROCESSINTERVALS.out.interval_list ).mix( bam_bai_2.combine( GATK4_PREPROCESSINTERVALS.out.interval_list ) ) + + GATK4_COLLECTREADCOUNTS ( inputs, fasta_no_meta, fai, dict ) + + GATK4_FILTERINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, GATK4_COLLECTREADCOUNTS.out.tsv.collect{ it[1] }, GATK4_ANNOTATEINTERVALS.out.annotated_intervals ) + + GATK4_INTERVALLISTTOOLS ( GATK4_FILTERINTERVALS.out.interval_list ) + + dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv + .map({ meta, tsv -> [ [id:'test'], tsv, [], [] ] }) + .groupTuple() + GATK4_DETERMINEGERMLINECONTIGPLOIDY ( dgcp_case_input, [], ploidy_model ) + + gcnvc_case_input = GATK4_COLLECTREADCOUNTS.out.tsv + .map({ meta, tsv -> return [[id:"test"], tsv, [] ]}) + .groupTuple() + GATK4_GERMLINECNVCALLER ( gcnvc_case_input, cnv_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) + + GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls, cnv_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) + + ch_versions = ch_versions.mix(GATK4_PREPROCESSINTERVALS.out.versions) + ch_versions = ch_versions.mix(GATK4_ANNOTATEINTERVALS.out.versions) + ch_versions = ch_versions.mix(GATK4_COLLECTREADCOUNTS.out.versions) + ch_versions = ch_versions.mix(GATK4_FILTERINTERVALS.out.versions) + ch_versions = ch_versions.mix(GATK4_INTERVALLISTTOOLS.out.versions) + ch_versions = ch_versions.mix(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.versions) + ch_versions = ch_versions.mix(GATK4_GERMLINECNVCALLER.out.versions) + ch_versions = ch_versions.mix(GATK4_POSTPROCESSGERMLINECNVCALLS.out.versions) + + emit: + candidate_cnvs_vcf_tar_gz = GATK4_GERMLINECNVCALLER.out.tar_gz // channel: [ val(meta), path(*.tar_gz) ] + versions = ch_versions // channel: [ versions.yml ] +} From 85b68250509e453a32973c11dc4e4d07e4f66534 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Wed, 12 Apr 2023 16:57:10 +0200 Subject: [PATCH 019/136] Update workflow --- modules.json | 27 ++++++++++++++++++++++++++- workflows/raredisease.nf | 16 +++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index fa00b5f6..70c8de8f 100644 --- a/modules.json +++ b/modules.json @@ -80,16 +80,36 @@ "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", "installed_by": ["modules"] }, + "gatk4/annotateintervals": { + "branch": "master", + "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "installed_by": ["modules"] + }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, + "gatk4/collectreadcounts": { + "branch": "master", + "git_sha": "1fccb96ee4fc3efcdb7ed257f016a59cecb83dec", + "installed_by": ["modules"] + }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, + "gatk4/determinegermlinecontigploidy": { + "branch": "master", + "git_sha": "14c2bbc2def3313b9f1d17fd6194f7c596b40887", + "installed_by": ["modules"] + }, + "gatk4/filterintervals": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", @@ -115,6 +135,11 @@ "git_sha": "643756685546fa61f5c8fba439af746c090b9180", "installed_by": ["modules"] }, + "gatk4/preprocessintervals": { + "branch": "master", + "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "installed_by": ["modules"] + }, "gatk4/printreads": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", @@ -334,4 +359,4 @@ } } } -} +} \ No newline at end of file diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index eb917010..0945ed93 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -219,6 +219,16 @@ workflow RAREDISEASE { : ch_references.bwamem2_index ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() : ch_references.bwamem2_index_mt_shift + ch_fasta_dict = params.dict ? Channel.fromPath(params.dict).collect() + : ( ch_references.fasta_dict ?: Channel.empty() ) + ch_blacklist_bed = params.blacklist_bed ? Channel.fromPath(params.blacklist_bed).collect() + : ( ch_references.blacklist_bed ?: Channel.empty() ) + ch_ploidy_priors = params.ploidy_priors ? Channel.fromPath(params.ploidy_priors).collect() + : ( ch_references.ploidy_priors ?: Channel.empty() ) + ch_plodiy_model = params.plodiy_model ? Channel.fromPath(params.plodiy_model).collect() + : ( ch_references.plodiy_model ?: Channel.empty() ) + ch_cnv_model = params.cnv_model ? Channel.fromPath(params.cnv_model).collect() + : ( ch_references.cnv_model ?: Channel.empty() ) ch_chrom_sizes = ch_references.chrom_sizes ch_genome_fai_no_meta = params.fasta_fai ? Channel.fromPath(params.fasta_fai).collect() : ch_references.fasta_fai @@ -337,7 +347,11 @@ workflow RAREDISEASE { ch_genome_fasta_meta, ch_genome_fai_no_meta, CHECK_INPUT.out.case_info, - ch_target_bed + ch_target_bed, + ch_fasta_dict, + ch_blacklist_bed, + ch_plodiy_model, + ch_ploidy_priors ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From d1a8b8e7e19730d8205e377c8f6a9b9b0ca324a2 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Fri, 14 Apr 2023 16:11:46 +0200 Subject: [PATCH 020/136] Install & update modules --- .../nf-core/gatk4/annotateintervals/main.nf | 12 +-- .../nf-core/gatk4/collectreadcounts/main.nf | 12 +-- modules/nf-core/gatk4/filterintervals/main.nf | 12 +-- .../nf-core/gatk4/germlinecnvcaller/main.nf | 74 +++++++++++++++++++ .../nf-core/gatk4/germlinecnvcaller/meta.yml | 61 +++++++++++++++ .../gatk4/postprocessgermlinecnvcalls/main.nf | 74 +++++++++++++++++++ .../postprocessgermlinecnvcalls/meta.yml | 66 +++++++++++++++++ .../nf-core/gatk4/preprocessintervals/main.nf | 12 +-- 8 files changed, 299 insertions(+), 24 deletions(-) create mode 100644 modules/nf-core/gatk4/germlinecnvcaller/main.nf create mode 100644 modules/nf-core/gatk4/germlinecnvcaller/meta.yml create mode 100644 modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf create mode 100644 modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml diff --git a/modules/nf-core/gatk4/annotateintervals/main.nf b/modules/nf-core/gatk4/annotateintervals/main.nf index 34a55ffb..25a3c406 100644 --- a/modules/nf-core/gatk4/annotateintervals/main.nf +++ b/modules/nf-core/gatk4/annotateintervals/main.nf @@ -2,10 +2,10 @@ process GATK4_ANNOTATEINTERVALS { tag "$meta.id" label 'process_single' - conda "bioconda::gatk4=4.3.0.0" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) @@ -32,15 +32,15 @@ process GATK4_ANNOTATEINTERVALS { def mappability_track = mappable_regions ? "--mappability-track ${mappable_regions}" : "" def segmental_duplication_tracks = segmental_duplication_regions ? "--segmental-duplication-track ${segmental_duplication_regions}" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK AnnotateIntervals] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" AnnotateIntervals \\ + gatk --java-options "-Xmx${avail_mem}M" AnnotateIntervals \\ ${inputs} \\ --reference ${fasta} \\ --output ${prefix}.tsv \\ diff --git a/modules/nf-core/gatk4/collectreadcounts/main.nf b/modules/nf-core/gatk4/collectreadcounts/main.nf index 37a90da0..8b121046 100644 --- a/modules/nf-core/gatk4/collectreadcounts/main.nf +++ b/modules/nf-core/gatk4/collectreadcounts/main.nf @@ -2,10 +2,10 @@ process GATK4_COLLECTREADCOUNTS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.3.0.0" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(input_index), path(intervals) @@ -30,14 +30,14 @@ process GATK4_COLLECTREADCOUNTS { args.contains("--format TSV") ? "tsv" : "hdf5" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK COLLECTREADCOUNTS] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" CollectReadCounts \\ + gatk --java-options "-Xmx${avail_mem}M" CollectReadCounts \\ --input $input \\ --intervals $intervals \\ --output ${prefix}.$extension \\ diff --git a/modules/nf-core/gatk4/filterintervals/main.nf b/modules/nf-core/gatk4/filterintervals/main.nf index 119f9a8d..3a4ae92a 100644 --- a/modules/nf-core/gatk4/filterintervals/main.nf +++ b/modules/nf-core/gatk4/filterintervals/main.nf @@ -2,10 +2,10 @@ process GATK4_FILTERINTERVALS { tag "$meta.id" label 'process_medium' - conda "bioconda::gatk4=4.3.0.0" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) @@ -25,14 +25,14 @@ process GATK4_FILTERINTERVALS { def annotated_command = annotated_intervals ? "--annotated-intervals $annotated_intervals" : "" def read_counts_command = read_counts ? "--input $read_counts" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK FilterIntervals] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" FilterIntervals \\ + gatk --java-options "-Xmx${avail_mem}M" FilterIntervals \\ $annotated_command \\ $read_counts_command \\ --intervals $intervals \\ diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf new file mode 100644 index 00000000..f3e7248e --- /dev/null +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -0,0 +1,74 @@ +process GATK4_GERMLINECNVCALLER { + tag "$meta.id" + label 'process_single' + + //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 + container "broadinstitute/gatk:4.4.0.0" //Biocontainers is missing a package + + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "GATK4_GERMLINECNVCALLER module does not support Conda. Please use Docker / Singularity / Podman instead." + } + + input: + tuple val(meta), path(tsv), path(intervals) + path model + path ploidy + + output: + tuple val(meta), path("*-cnv-calls.tar.gz"), emit: calls, optional: true + tuple val(meta), path("*-cnv-model.tar.gz"), emit: model, 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 intervals_command = intervals ? "--intervals $intervals" : "" + def untar_ploidy = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "tar -xzf ${ploidy}" : "") : "" + def untar_model = model ? (model.name.endsWith(".tar.gz") ? "tar -xzf ${model}" : "") : "" + def ploidy_command = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "--contig-ploidy-calls ${ploidy.toString().replace(".tar.gz","")}" : "--contig-ploidy-calls ${ploidy}") : "" + def model_command = model ? (model.name.endsWith(".tar.gz") ? "--model ${model.toString().replace(".tar.gz","")}/${prefix}-model" : "--model ${model}/${prefix}-model") : "" + def input_list = tsv.collect{"--input $it"}.join(' ') + def output_command = model ? "--output ${prefix}-cnv-calls" : "--output ${prefix}-cnv-model" + def tar_output = model ? "tar -czf ${prefix}-cnv-calls.tar.gz ${prefix}-cnv-calls" : "tar -czf ${prefix}-cnv-model.tar.gz ${prefix}-cnv-model" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK GermlineCNVCaller] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + ${untar_ploidy} + ${untar_model} + + gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ + $input_list \\ + $ploidy_command \\ + $output_command \\ + --output-prefix $prefix \\ + $args \\ + $intervals_command \\ + $model_command + ${tar_output} + + 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}.tar.gz + + 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/germlinecnvcaller/meta.yml b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml new file mode 100644 index 00000000..1574c06a --- /dev/null +++ b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml @@ -0,0 +1,61 @@ +name: "gatk4_germlinecnvcaller" +description: Calls copy-number variants in germline samples given their counts and the output of DetermineGermlineContigPloidy. +keywords: + - gatk + - gatk4_germlinecnvcaller +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"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - tsv: + type: file(s) + description: One or more count TSV files created with gatk/collectreadcounts + pattern: "*.tsv" + - intervals: + type: file + description: Optional - A bed file containing the intervals to include in the process + pattern: "*.bed" + - model: + type: directory + description: Optional - Tar gzipped directory containing the model produced by germlinecnvcaller cohort mode + pattern: "*.tar.gz" + - ploidy: + type: file + description: Tar gzipped directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode + pattern: "*.tar.gz" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - calls: + type: file + description: Tar gzipped directory containing calls produced by germlinecnvcaller case mode + pattern: "*.tar" + - model: + type: directory + description: Optional - Tar gzipped directory containing the model produced by germlinecnvcaller cohort mode + pattern: "*.tar.gz" + +authors: + - "@ryanjameskennedy" + - "@ViktorHy" diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf new file mode 100644 index 00000000..9e965107 --- /dev/null +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -0,0 +1,74 @@ +process GATK4_POSTPROCESSGERMLINECNVCALLS { + tag "$meta.id" + label 'process_single' + + //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 + container "broadinstitute/gatk:4.4.0.0" //Biocontainers is missing a package + + // Exit if running this module with -profile conda / -profile mamba + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + exit 1, "GATK4_POSTPROCESSGERMLINECNVCALLS module does not support Conda. Please use Docker / Singularity / Podman instead." + } + + input: + tuple val(meta), path(ploidy) + path model + path calls + + output: + tuple val(meta), path("*_genotyped_intervals.vcf.gz") , emit: intervals, optional: true + tuple val(meta), path("*_genotyped_segments.vcf.gz") , emit: segments, optional: true + tuple val(meta), path("*_denoised.vcf.gz") , emit: denoised, 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 untar_ploidy = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "tar -xzf ${ploidy}" : "") : "" + def untar_model = model ? (model.name.endsWith(".tar.gz") ? "tar -xzf ${model}" : "") : "" + def untar_calls = calls ? (calls.name.endsWith(".tar.gz") ? "tar -xzf ${calls}" : "") : "" + def ploidy_command = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "--contig-ploidy-calls ${ploidy.toString().replace(".tar.gz","")}" : "--contig-ploidy-calls ${ploidy}") : "" + def model_command = model ? (model.name.endsWith(".tar.gz") ? "--model-shard-path ${model.toString().replace(".tar.gz","")}/${prefix}-model" : "--model-shard-path ${model}/${prefix}-model") : "" + def calls_command = calls ? (calls.name.endsWith(".tar.gz") ? "--calls-shard-path ${calls.toString().replace(".tar.gz","")}/${prefix}-calls" : "--calls-shard-path ${model}/${prefix}-calls") : "" + + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK GermlineCNVCaller] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' + } else { + avail_mem = (task.memory.mega*0.8).intValue() + } + """ + ${untar_ploidy} + ${untar_model} + ${untar_calls} + + gatk --java-options "-Xmx${avail_mem}g" PostprocessGermlineCNVCalls \\ + $ploidy_command \\ + $model_command \\ + $calls_command \\ + --output-genotyped-intervals ${prefix}_genotyped_intervals.vcf.gz \\ + --output-genotyped-segments ${prefix}_genotyped_segments.vcf.gz \\ + --output-denoised-copy-ratios ${prefix}_denoised.vcf.gz + + 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}_genotyped_intervals.vcf.gz + touch ${prefix}_genotyped_segments.vcf.gz + touch ${prefix}_denoised.vcf.gz + + 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/postprocessgermlinecnvcalls/meta.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml new file mode 100644 index 00000000..60a4c9ef --- /dev/null +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml @@ -0,0 +1,66 @@ +name: "gatk4_postprocessgermlinecnvcalls" +description: Postprocesses the output of GermlineCNVCaller and generates VCFs and denoised copy ratios +keywords: + - gatk4 + - postprocessgermlinecnvcalls + - copy number +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/360037593411-PostprocessGermlineCNVCalls + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - ploidy: + type: directory + description: | + Optional - A folder containing the ploidy model. + When a model is supplied to tool will run in CASE mode. + The folder can be tar-zipped. + pattern: "*.tar.gz" + - calls: + type: directory + description: A folder containing the calls from the input files + pattern: "*.tar.gz" + - model: + type: directory + description: | + A folder containing the model from the input files. + This will only be created in COHORT mode (when no model is supplied to the process). + pattern: "*.tar.gz" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - denoised: + type: file + description: Denoised copy ratio file + pattern: "*.vcf.gz" + - segments: + type: file + description: Segments VCF file + pattern: "*.vcf.gz" + - intervals: + type: file + description: Intervals VCF file + pattern: "*.vcf.gz" + +authors: + - "@ryanjameskennedy" diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf index e89132e8..3edd7068 100644 --- a/modules/nf-core/gatk4/preprocessintervals/main.nf +++ b/modules/nf-core/gatk4/preprocessintervals/main.nf @@ -2,10 +2,10 @@ process GATK4_PREPROCESSINTERVALS { tag "$fasta" label 'process_medium' - conda "bioconda::gatk4=4.3.0.0" + conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.3.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.3.0.0--py36hdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(exclude_intervals) @@ -25,14 +25,14 @@ process GATK4_PREPROCESSINTERVALS { def prefix = task.ext.prefix ?: "${meta.id}" def exclude_command = exclude_intervals ? "--exclude-intervals $exclude_intervals" : "" - def avail_mem = 3 + def avail_mem = 3072 if (!task.memory) { log.info '[GATK PreprocessIntervals] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' } else { - avail_mem = task.memory.giga + avail_mem = (task.memory.mega*0.8).intValue() } """ - gatk --java-options "-Xmx${avail_mem}g" PreprocessIntervals \\ + gatk --java-options "-Xmx${avail_mem}M" PreprocessIntervals \\ $exclude_command \\ --reference $fasta \\ --output ${prefix}.interval_list \\ From a5d6de25103938ab33dc41b9924f5f551f92b207 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Fri, 14 Apr 2023 16:13:12 +0200 Subject: [PATCH 021/136] Fix formatting and structure --- ...onfig => call_sv_germlinecnvcaller.config} | 12 +- modules.json | 302 +++++++++++++----- nextflow.config | 1 + .../local/call_structural_variants.nf | 22 +- ...caller.nf => call_sv_germlinecnvcaller.nf} | 47 +-- workflows/raredisease.nf | 3 +- 6 files changed, 273 insertions(+), 114 deletions(-) rename conf/modules/{call_cnv_germlinecnvcaller.config => call_sv_germlinecnvcaller.config} (73%) rename subworkflows/local/variant_calling/{call_cnv_germlinecnvcaller.nf => call_sv_germlinecnvcaller.nf} (53%) diff --git a/conf/modules/call_cnv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config similarity index 73% rename from conf/modules/call_cnv_germlinecnvcaller.config rename to conf/modules/call_sv_germlinecnvcaller.config index 7a912019..aafa3f01 100644 --- a/conf/modules/call_cnv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -16,42 +16,42 @@ // process { - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_PREPROCESSINTERVALS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_PREPROCESSINTERVALS*" { publishDir = [ enabled: false ] ext.args = "--padding 0 --interval-merging-rule OVERLAPPING_ONLY" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_ANNOTATEINTERVALS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_ANNOTATEINTERVALS*" { publishDir = [ enabled: false ] ext.args = "--interval-merging-rule OVERLAPPING_ONLY" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_FILTERINTERVALS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_FILTERINTERVALS*" { publishDir = [ enabled: false ] ext.args = "--interval-merging-rule OVERLAPPING_ONLY" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_INTERVALLISTTOOLS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_INTERVALLISTTOOLS*" { publishDir = [ enabled: false ] ext.args = "--SUBDIVISION_MODE INTERVAL_COUNT --SCATTER_CONTENT 15000" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS*" { publishDir = [ enabled: false ] ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_CNV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER*" { publishDir = [ enabled: false ] diff --git a/modules.json b/modules.json index 70c8de8f..f7601ac3 100644 --- a/modules.json +++ b/modules.json @@ -8,352 +8,506 @@ "bcftools/concat": { "branch": "master", "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/filter": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/norm": { "branch": "master", "git_sha": "bcad95fb35e567ad25840d3297c3e17eff211a3a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/reheader": { "branch": "master", "git_sha": "bd4b60c7f9358c7146ac198fd0c4ae6355ddd086", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/roh": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/view": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwa/index": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwamem2/index": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwamem2/mem": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "7101db4432d3268b7fcb5b8f75fa0a022dc5561b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "deepvariant": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "expansionhunter": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/annotateintervals": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/collectreadcounts": { "branch": "master", - "git_sha": "1fccb96ee4fc3efcdb7ed257f016a59cecb83dec", - "installed_by": ["modules"] + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", "git_sha": "14c2bbc2def3313b9f1d17fd6194f7c596b40887", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/filterintervals": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": [ + "modules" + ] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "gatk4/germlinecnvcaller": { + "branch": "master", + "git_sha": "ba1ad555be19cb6cedb52c49b21e267b0b7110b7", + "installed_by": [ + "modules" + ] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mutect2": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "gatk4/postprocessgermlinecnvcalls": { + "branch": "master", + "git_sha": "ba1ad555be19cb6cedb52c49b21e267b0b7110b7", + "installed_by": [ + "modules" + ] }, "gatk4/preprocessintervals": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "installed_by": [ + "modules" + ] }, "gatk4/printreads": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/revertsam": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/annotate": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/compound": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/models": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/score": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "glnexus": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplocheck": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplogrep2/classify": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mosdepth": { "branch": "master", "git_sha": "783cc040350dbee673fd57f6a6300aea3d085b7c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "peddy": { "branch": "master", "git_sha": "21e6e085967902fb393b27b2e7590ac4c85fab8e", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "28995552268a117551ded48dadcf42b0caf0e834", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/liftovervcf": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/markduplicates": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/renamesampleinvcf": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/sortvcf": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "qualimap/bamqc": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rhocall/annotate": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "smncopynumbercaller": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stranger": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "svdb/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "svdb/query": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/tabix": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/cov": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/sv": { "branch": "master", "git_sha": "0367c23758d83fc6973a8cd35ecba40a0cfcf2af", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "untar": { "branch": "master", "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "vcfanno": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } } diff --git a/nextflow.config b/nextflow.config index db9dfa5c..8d1b1c12 100644 --- a/nextflow.config +++ b/nextflow.config @@ -266,6 +266,7 @@ includeConfig 'conf/modules/qc_bam.config' includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' includeConfig 'conf/modules/peddy_check.config' +includeConfig 'conf/modules/call_sv_germlinecnvcaller.config' // Function to ensure that resource requirements don't go beyond // a maximum limit diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index e999b301..bcc84f15 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -5,7 +5,7 @@ include { CALL_SV_MANTA } from './variant_calling/call_sv_manta' include { CALL_SV_TIDDIT } from './variant_calling/call_sv_tiddit' include { SVDB_MERGE } from '../../modules/nf-core/svdb/merge/main' -include { CALL_CNV_GERMLINECNVCALLER } from './variant_calling/call_cnv_germlinecnvcaller' +include { CALL_SV_GERMLINECNVCALLER } from './variant_calling/call_sv_germlinecnvcaller' include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_STRUCTURAL_VARIANTS { @@ -14,18 +14,17 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_bam // channel: [mandatory] [ val(meta), path(bam) ] ch_bai // channel: [mandatory] [ val(meta), path(bai) ] ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - bam_bai_2 // channel: [ val(meta), path(bam), path(bai) ] ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] ch_fasta_no_meta // channel: [mandatory] [ path(fasta) ] ch_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] ch_fai // channel: [mandatory] [ path(fai) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] - dict // channel: [ path(dict) ] - blacklist_bed // channel: [ path(blacklist_bed) ] - priors // channel: [ path(priors) ] - ploidy_model // channel: [ path(ploidy_model) ] - cnv_model // channel: [ path(cnv_model) ] + ch_dict // channel: [ path(dict) ] + ch_blacklist_bed // channel: [ path(blacklist_bed) ] + ch_priors // channel: [ path(priors) ] + ch_ploidy_model // channel: [ path(ploidy_model) ] + ch_cnv_model // channel: [ path(cnv_model) ] main: ch_versions = Channel.empty() @@ -40,14 +39,15 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_CNV_GERMLINECNVCALLER (bam_bai, fasta_no_meta, fai, target_bed, blacklist_bed, dict, priors, ploidy_model, cnv_model ) - .candidate_cnvs_vcf + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_fasta_meta, ch_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_priors, ch_ploidy_model, ch_cnv_model ) + .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } //merge tiddit_vcf .combine(manta_vcf) + .combine(gcnvcaller_vcf) .toList() .set { vcf_list } @@ -55,13 +55,13 @@ workflow CALL_STRUCTURAL_VARIANTS { .combine(vcf_list) .set { merge_input_vcfs } - SVDB_MERGE (merge_input_vcfs, ["tiddit","manta"]) + SVDB_MERGE (merge_input_vcfs, ["tiddit","manta", "gcnvcaller"]) TABIX_TABIX (SVDB_MERGE.out.vcf) ch_versions = ch_versions.mix(CALL_SV_MANTA.out.versions) ch_versions = ch_versions.mix(CALL_SV_TIDDIT.out.versions) - ch_versions = ch_versions.mix(CALL_CNV_GERMLINECNVCALLER.out.versions) + ch_versions = ch_versions.mix(CALL_SV_GERMLINECNVCALLER.out.versions) ch_versions = ch_versions.mix(TABIX_TABIX.out.versions) emit: diff --git a/subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf similarity index 53% rename from subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf rename to subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 7540e5dd..59488457 100644 --- a/subworkflows/local/variant_calling/call_cnv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -11,45 +11,46 @@ include { GATK4_DETERMINEGERMLINECONTIGPLOIDY } from '../../../modules/nf-core/g include { GATK4_GERMLINECNVCALLER } from '../../../modules/nf-core/gatk4/germlinecnvcaller/main.nf' include { GATK4_POSTPROCESSGERMLINECNVCALLS } from '../../../modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf' -workflow CALL_CNV_GERMLINECNVCALLER { +workflow CALL_SV_GERMLINECNVCALLER { take: - bam_bai // channel: [ val(meta), path(bam), path(bai) ] - bam_bai_2 // channel: [ val(meta), path(bam), path(bai) ] - fasta_no_meta // channel: [ path(fasta_no_meta) ] - fai // channel: [ path(fai) ] - target_bed // channel: [ path(target_bed) ] - blacklist_bed // channel: [ val(meta), path(blacklist_bed) ] - dict // channel: [ path(dict) ] - priors // [ path(priors) ] - ploidy_model // channel: [ path(ploidy_model) ] - cnv_model // channel: [ path(cnv_model) ] + ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] + ch_fasta_no_meta // channel: [ path(ch_fasta_no_meta) ] + ch_fai // channel: [ path(ch_fai) ] + ch_target_bed // channel: [ path(ch_target_bed) ] + ch_blacklist_bed // channel: [ val(meta), path(ch_blacklist_bed) ] + ch_dict // channel: [ path(ch_dict) ] + ch_priors // [ path(ch_priors) ] + ch_ploidy_model // channel: [ path(ch_ploidy_model) ] + ch_cnv_model // channel: [ path(ch_cnv_model) ] main: ch_versions = Channel.empty() - GATK4_PREPROCESSINTERVALS ( blacklist_bed, fasta_no_meta, fai, dict ) + GATK4_PREPROCESSINTERVALS ( ch_blacklist_bed, ch_fasta_no_meta, ch_fai, ch_dict ) - GATK4_ANNOTATEINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, fasta_no_meta, fai, dict, [], [], [], []) + GATK4_ANNOTATEINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, ch_fasta_no_meta, ch_fai, ch_dict, [], [], [], []) - inputs = bam_bai.combine( GATK4_PREPROCESSINTERVALS.out.interval_list ).mix( bam_bai_2.combine( GATK4_PREPROCESSINTERVALS.out.interval_list ) ) + input = ch_bam_bai.combine( GATK4_PREPROCESSINTERVALS.out.interval_list ) - GATK4_COLLECTREADCOUNTS ( inputs, fasta_no_meta, fai, dict ) + GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict ) GATK4_FILTERINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, GATK4_COLLECTREADCOUNTS.out.tsv.collect{ it[1] }, GATK4_ANNOTATEINTERVALS.out.annotated_intervals ) GATK4_INTERVALLISTTOOLS ( GATK4_FILTERINTERVALS.out.interval_list ) dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv - .map({ meta, tsv -> [ [id:'test'], tsv, [], [] ] }) + .map({ meta, tsv -> [ [id:'test'], tsv ] }) .groupTuple() - GATK4_DETERMINEGERMLINECONTIGPLOIDY ( dgcp_case_input, [], ploidy_model ) + .map({ meta, tsv -> return [meta, tsv, [], [] ]}) + GATK4_DETERMINEGERMLINECONTIGPLOIDY ( dgcp_case_input, [], ch_ploidy_model ) gcnvc_case_input = GATK4_COLLECTREADCOUNTS.out.tsv - .map({ meta, tsv -> return [[id:"test"], tsv, [] ]}) + .map({ meta, tsv -> return [[id:"test"], tsv ]}) .groupTuple() - GATK4_GERMLINECNVCALLER ( gcnvc_case_input, cnv_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) + .map({ meta, tsv -> return [meta, tsv, [] ]}) + GATK4_GERMLINECNVCALLER ( gcnvc_case_input, ch_cnv_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) - GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls, cnv_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) + GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_GERMLINECNVCALLER.out.calls, ch_cnv_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) ch_versions = ch_versions.mix(GATK4_PREPROCESSINTERVALS.out.versions) ch_versions = ch_versions.mix(GATK4_ANNOTATEINTERVALS.out.versions) @@ -61,6 +62,8 @@ workflow CALL_CNV_GERMLINECNVCALLER { ch_versions = ch_versions.mix(GATK4_POSTPROCESSGERMLINECNVCALLS.out.versions) emit: - candidate_cnvs_vcf_tar_gz = GATK4_GERMLINECNVCALLER.out.tar_gz // channel: [ val(meta), path(*.tar_gz) ] - versions = ch_versions // channel: [ versions.yml ] + genotyped_intervals_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.intervals // channel: [ val(meta), path(*.tar.gz) ] + genotyped_segments_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments // channel: [ val(meta), path(*.tar.gz) ] + denoised_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.denoised // channel: [ val(meta), path(*.tar.gz) ] + versions = ch_versions // channel: [ versions.yml ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0945ed93..a116759e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -350,8 +350,9 @@ workflow RAREDISEASE { ch_target_bed, ch_fasta_dict, ch_blacklist_bed, + ch_ploidy_priors, ch_plodiy_model, - ch_ploidy_priors + ch_cnv_model ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From 5be1daa60e8628c987354a4fdd41425dc2736494 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Fri, 14 Apr 2023 16:29:58 +0200 Subject: [PATCH 022/136] Fix linting error --- modules.json | 290 +++++++++++++-------------------------------------- 1 file changed, 73 insertions(+), 217 deletions(-) diff --git a/modules.json b/modules.json index f7601ac3..293fc525 100644 --- a/modules.json +++ b/modules.json @@ -8,509 +8,365 @@ "bcftools/concat": { "branch": "master", "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", "git_sha": "bcad95fb35e567ad25840d3297c3e17eff211a3a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", "git_sha": "bd4b60c7f9358c7146ac198fd0c4ae6355ddd086", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwa/index": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "7101db4432d3268b7fcb5b8f75fa0a022dc5561b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "deepvariant": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/annotateintervals": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/collectreadcounts": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", "git_sha": "14c2bbc2def3313b9f1d17fd6194f7c596b40887", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filterintervals": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/germlinecnvcaller": { "branch": "master", "git_sha": "ba1ad555be19cb6cedb52c49b21e267b0b7110b7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", "git_sha": "ba1ad555be19cb6cedb52c49b21e267b0b7110b7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/preprocessintervals": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "643756685546fa61f5c8fba439af746c090b9180", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/models": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/score": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "glnexus": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplocheck": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "manta/germline": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", "git_sha": "783cc040350dbee673fd57f6a6300aea3d085b7c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "peddy": { "branch": "master", "git_sha": "21e6e085967902fb393b27b2e7590ac4c85fab8e", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "28995552268a117551ded48dadcf42b0caf0e834", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "smncopynumbercaller": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stranger": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "svdb/query": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", "git_sha": "0367c23758d83fc6973a8cd35ecba40a0cfcf2af", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "untar": { "branch": "master", "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } } } } -} \ No newline at end of file +} From 3e200576dc4d3ec5b67501572e1d9fc2c3cff5f7 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 10:22:43 +0200 Subject: [PATCH 023/136] Update test_one_sample.config --- conf/test_one_sample.config | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index e4f73a33..a998bad3 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -28,16 +28,21 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" + dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/targetY.interval_list" + blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38.preprocessed.blacklisted.gcfiltered.interval_list" + cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" mt_fasta_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.fa" mt_intervals = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt.intervals" mt_intervals_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.intervals" mt_backchain_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.back_chain" + ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" + plodiy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_sv.ini" From d18d4cd720dbc599f45c1264e25d2bb1a6976ffa Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 10:38:54 +0200 Subject: [PATCH 024/136] Add gatk params to rd main.nf --- main.nf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/main.nf b/main.nf index 64368429..1b6cb9ae 100644 --- a/main.nf +++ b/main.nf @@ -20,6 +20,7 @@ nextflow.enable.dsl = 2 params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') params.fasta_fai = WorkflowMain.getGenomeAttribute(params, 'fai') +params.dict = WorkflowMain.getGenomeAttribute(params, 'dict') params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') @@ -45,6 +46,7 @@ params.sequence_dictionary = WorkflowMain.getGenomeAttribute(params, params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') +params.blacklist_bed = WorkflowMain.getGenomeAttribute(params, 'blacklist_bed') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filters') @@ -56,6 +58,9 @@ params.vep_cache_version = WorkflowMain.getGenomeAttribute(params, params.gens_interval_list = WorkflowMain.getGenomeAttribute(params, 'gens_interval_list') params.gens_pon = WorkflowMain.getGenomeAttribute(params, 'gens_pon') params.gens_gnomad_pos = WorkflowMain.getGenomeAttribute(params, 'gens_gnomad_pos') +params.ploidy_priors = WorkflowMain.getGenomeAttribute(params, 'ploidy_priors') +params.plodiy_model = WorkflowMain.getGenomeAttribute(params, 'plodiy_model') +params.cnv_model = WorkflowMain.getGenomeAttribute(params, 'cnv_model') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 6083b1b8c76fa318e7fccade93374ae9ca55dc10 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 12:17:13 +0200 Subject: [PATCH 025/136] Add meta to blacklist bed --- subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf | 2 +- workflows/raredisease.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 59488457..c1133f4a 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -19,7 +19,7 @@ workflow CALL_SV_GERMLINECNVCALLER { ch_target_bed // channel: [ path(ch_target_bed) ] ch_blacklist_bed // channel: [ val(meta), path(ch_blacklist_bed) ] ch_dict // channel: [ path(ch_dict) ] - ch_priors // [ path(ch_priors) ] + ch_priors // channel: [ path(ch_priors) ] ch_ploidy_model // channel: [ path(ch_ploidy_model) ] ch_cnv_model // channel: [ path(ch_cnv_model) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a116759e..dafdf01a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -221,7 +221,7 @@ workflow RAREDISEASE { : ch_references.bwamem2_index_mt_shift ch_fasta_dict = params.dict ? Channel.fromPath(params.dict).collect() : ( ch_references.fasta_dict ?: Channel.empty() ) - ch_blacklist_bed = params.blacklist_bed ? Channel.fromPath(params.blacklist_bed).collect() + ch_blacklist_bed = params.blacklist_bed ? Channel.fromPath(params.blacklist_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() : ( ch_references.blacklist_bed ?: Channel.empty() ) ch_ploidy_priors = params.ploidy_priors ? Channel.fromPath(params.ploidy_priors).collect() : ( ch_references.ploidy_priors ?: Channel.empty() ) From d0e8820106d74e135b536bfc294d418257bc3413 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 14:06:07 +0200 Subject: [PATCH 026/136] Change germlinecnvcaller input channel --- subworkflows/local/call_structural_variants.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index bcc84f15..3166b7c5 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -39,7 +39,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_fasta_meta, ch_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_priors, ch_ploidy_model, ch_cnv_model ) + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_fasta_no_meta, ch_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_priors, ch_ploidy_model, ch_cnv_model ) .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } From 343f62fad1a076813db9149b23d7f382abd70d0c Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 14:44:18 +0200 Subject: [PATCH 027/136] Update nextflow_schema.json --- nextflow_schema.json | 103 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 84 insertions(+), 19 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index ab50b9a5..8a4bb53d 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,7 +10,10 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": ["input", "outdir"], + "required": [ + "input", + "outdir" + ], "properties": { "input": { "type": "string", @@ -72,6 +75,13 @@ "fa_icon": "far fa-file-code", "hidden": true }, + "dict": { + "type": "string", + "default": "None", + "hidden": true, + "fa_icon": "far fa-file-code", + "format": "file-path" + }, "igenomes_base": { "type": "string", "format": "directory-path", @@ -289,6 +299,15 @@ "help_text": "If you would like to limit your analysis to specific regions of the genome, you can pass those regions in a bed file using this option", "hidden": true }, + "blacklist_bed": { + "type": "string", + "fa_icon": "fas fa-bezier-curve", + "description": "Path to directory for blacklist bed file.", + "help_text": "If you would like to limit your analysis to exclude specific regions of the genome, you can pass those regions in a bed file using this option", + "hidden": true, + "default": "None", + "format": "file-path" + }, "svdb_query_dbs": { "type": "string", "format": "file-path", @@ -349,7 +368,7 @@ "gens_interval_list": { "type": "string", "format": "file-path", - "default": null, + "default": "None", "fa_icon": "fas fa-bezier-curve", "description": "Path to interval list for Gens.", "help_text": "This file contains the binning intervals used for CollectReadCounts.", @@ -358,7 +377,7 @@ "gens_pon": { "type": "string", "format": "file-path", - "default": null, + "default": "None", "fa_icon": "far fa-file-code", "description": "Path to panel of normals for Gens.", "help_text": "The panel used to run DenoiseReadCounts.", @@ -367,11 +386,38 @@ "gens_gnomad_pos": { "type": "string", "format": "file-path", - "default": null, + "default": "None", "fa_icon": "far fa-bezier-curve", "description": "Path to a list of common SNP locations for Gens.", "help_text": "Locations of gnomad SNPs with a high enough BAF.", "hidden": true + }, + "ploidy_priors": { + "type": "string", + "fa_icon": "far fa-file-code", + "description": "Contains contig ploidy priors for gatk4's DetermineGermlineContigPloidy", + "hidden": true, + "format": "path", + "default": "None", + "help_text": "When you are generating a ploidy model using GATK4 DetermineGermlineContigPloidy cohort, this path is required." + }, + "plodiy_model": { + "type": "string", + "fa_icon": "fas fa-folder-open", + "description": "Tar gzipped directory containing the ploidy model files", + "hidden": true, + "format": "path", + "default": "None", + "help_text": "Produced in GATK4 DetermineGermlineContigPloidy cohort, this model is required for generating a cnv model when using GermlineCNVCaller." + }, + "cnv_model": { + "type": "string", + "fa_icon": "fas fa-folder-open", + "description": "Tar gzipped directory containing the cnv model files", + "hidden": true, + "format": "path", + "default": "None", + "help_text": "Produced in GATK4 DetermineGermlineContigPloidy cohort, this model is required for generating a cnv calls when using GermlineCNVCaller." } } }, @@ -386,29 +432,29 @@ "default": "wgs", "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-book", - "enum": ["wgs", "wes", "mito"] + "enum": [ + "wgs", + "wes", + "mito" + ] }, "skip_snv_annotation": { "type": "boolean", - "default": false, "description": "Specifies whether or not to skip annotate SNV subworkflow.", "fa_icon": "fas fa-book" }, "skip_sv_annotation": { "type": "boolean", - "default": false, "description": "Specifies whether or not to skip annotate structural variant subworkflow.", "fa_icon": "fas fa-book" }, "skip_mt_analysis": { "type": "boolean", - "default": false, "description": "Specifies whether or not to skip the subworkflow that analyses mitochondrial genome separate from the nuclear genome.", "fa_icon": "fas fa-book" }, "gens_switch": { "type": "boolean", - "default": false, "description": "Specifies whether or not to run gens preprocessing subworkflow.", "fa_icon": "fas fa-book" }, @@ -417,7 +463,9 @@ "default": "illumina", "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-book", - "enum": ["illumina"] + "enum": [ + "illumina" + ] } } }, @@ -432,11 +480,13 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-map-signs", - "enum": ["bwamem2", "sentieon"] + "enum": [ + "bwamem2", + "sentieon" + ] }, "rmdup": { "type": "boolean", - "default": false, "description": "Specifies whether duplicates reads should be removed prior to variant calling.", "fa_icon": "fas fa-map-signs", "hidden": true @@ -458,7 +508,6 @@ }, "pcr_amplification": { "type": "boolean", - "default": false, "description": "indicates whether the sample library is amplified using PCR or not. Set to false for PCR Free samples.", "fa_icon": "fas fa-map-signs" }, @@ -467,14 +516,21 @@ "default": "snp", "description": "Specifies the variant types for sentieon variant caller.", "fa_icon": "fas fa-map-signs", - "enum": ["snp", "indel", "snp,indel"] + "enum": [ + "snp", + "indel", + "snp,indel" + ] }, "variant_caller": { "type": "string", "default": "deepvariant", "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", "fa_icon": "fas fa-map-signs", - "enum": ["deepvariant", "sentieon"] + "enum": [ + "deepvariant", + "sentieon" + ] } } }, @@ -486,10 +542,12 @@ "properties": { "vep_cache_version": { "type": "integer", - "default": "107", + "default": 107, "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-book", - "enum": [107] + "enum": [ + 107 + ] } } }, @@ -606,7 +664,14 @@ "description": "Method used to save pipeline results to output directory.", "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", "fa_icon": "fas fa-copy", - "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"], + "enum": [ + "symlink", + "rellink", + "link", + "copy", + "copyNoFollow", + "move" + ], "hidden": true }, "email_on_fail": { @@ -714,4 +779,4 @@ "$ref": "#/definitions/generic_options" } ] -} +} \ No newline at end of file From 34f1a25530489523995af774ac16464c420d16fe Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 15:02:35 +0200 Subject: [PATCH 028/136] Fix prettier linting error --- nextflow_schema.json | 46 +++++++++----------------------------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 8a4bb53d..b50c02a0 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -10,10 +10,7 @@ "type": "object", "fa_icon": "fas fa-terminal", "description": "Define where the pipeline should find input data and save output data.", - "required": [ - "input", - "outdir" - ], + "required": ["input", "outdir"], "properties": { "input": { "type": "string", @@ -432,11 +429,7 @@ "default": "wgs", "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-book", - "enum": [ - "wgs", - "wes", - "mito" - ] + "enum": ["wgs", "wes", "mito"] }, "skip_snv_annotation": { "type": "boolean", @@ -463,9 +456,7 @@ "default": "illumina", "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-book", - "enum": [ - "illumina" - ] + "enum": ["illumina"] } } }, @@ -480,10 +471,7 @@ "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", "fa_icon": "fas fa-map-signs", - "enum": [ - "bwamem2", - "sentieon" - ] + "enum": ["bwamem2", "sentieon"] }, "rmdup": { "type": "boolean", @@ -516,21 +504,14 @@ "default": "snp", "description": "Specifies the variant types for sentieon variant caller.", "fa_icon": "fas fa-map-signs", - "enum": [ - "snp", - "indel", - "snp,indel" - ] + "enum": ["snp", "indel", "snp,indel"] }, "variant_caller": { "type": "string", "default": "deepvariant", "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", "fa_icon": "fas fa-map-signs", - "enum": [ - "deepvariant", - "sentieon" - ] + "enum": ["deepvariant", "sentieon"] } } }, @@ -545,9 +526,7 @@ "default": 107, "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", "fa_icon": "fas fa-book", - "enum": [ - 107 - ] + "enum": [107] } } }, @@ -664,14 +643,7 @@ "description": "Method used to save pipeline results to output directory.", "help_text": "The Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.", "fa_icon": "fas fa-copy", - "enum": [ - "symlink", - "rellink", - "link", - "copy", - "copyNoFollow", - "move" - ], + "enum": ["symlink", "rellink", "link", "copy", "copyNoFollow", "move"], "hidden": true }, "email_on_fail": { @@ -779,4 +751,4 @@ "$ref": "#/definitions/generic_options" } ] -} \ No newline at end of file +} From 9a24dda1ed7e4b372b897b384584b15b00147753 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 15:03:50 +0200 Subject: [PATCH 029/136] Update configs re hg38.blacklist_interval.bed --- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf/test.config b/conf/test.config index 870d7f2f..21e11055 100644 --- a/conf/test.config +++ b/conf/test.config @@ -29,7 +29,7 @@ params { // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" - blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38.preprocessed.blacklisted.gcfiltered.interval_list" + blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" plodiy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index a998bad3..ae8bae27 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -33,7 +33,7 @@ params { gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/targetY.interval_list" - blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/grch38.preprocessed.blacklisted.gcfiltered.interval_list" + blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" From f8e9910bab1c0238475d0461eb8bd075adbc97e2 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 15:49:01 +0200 Subject: [PATCH 030/136] Fix channel errors --- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index c1133f4a..25519be9 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -16,7 +16,7 @@ workflow CALL_SV_GERMLINECNVCALLER { ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] ch_fasta_no_meta // channel: [ path(ch_fasta_no_meta) ] ch_fai // channel: [ path(ch_fai) ] - ch_target_bed // channel: [ path(ch_target_bed) ] + ch_target_bed // channel: [ val(meta), path(bed), path(tbi) ] ch_blacklist_bed // channel: [ val(meta), path(ch_blacklist_bed) ] ch_dict // channel: [ path(ch_dict) ] ch_priors // channel: [ path(ch_priors) ] @@ -30,11 +30,11 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_ANNOTATEINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, ch_fasta_no_meta, ch_fai, ch_dict, [], [], [], []) - input = ch_bam_bai.combine( GATK4_PREPROCESSINTERVALS.out.interval_list ) + input = ch_bam_bai.combine( GATK4_PREPROCESSINTERVALS.out.interval_list.collect{ it[1] } ) GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict ) - GATK4_FILTERINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, GATK4_COLLECTREADCOUNTS.out.tsv.collect{ it[1] }, GATK4_ANNOTATEINTERVALS.out.annotated_intervals ) + GATK4_FILTERINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, GATK4_COLLECTREADCOUNTS.out.tsv.collect{ it[1] }, GATK4_ANNOTATEINTERVALS.out.annotated_intervals.collect{ it[1] } ) GATK4_INTERVALLISTTOOLS ( GATK4_FILTERINTERVALS.out.interval_list ) From 57a0dbe448f561ca8ca953874be8cbdd7d99e840 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 16:03:46 +0200 Subject: [PATCH 031/136] Remove cohort modules --- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 25519be9..e31f4979 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -26,18 +26,10 @@ workflow CALL_SV_GERMLINECNVCALLER { main: ch_versions = Channel.empty() - GATK4_PREPROCESSINTERVALS ( ch_blacklist_bed, ch_fasta_no_meta, ch_fai, ch_dict ) - - GATK4_ANNOTATEINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, ch_fasta_no_meta, ch_fai, ch_dict, [], [], [], []) - - input = ch_bam_bai.combine( GATK4_PREPROCESSINTERVALS.out.interval_list.collect{ it[1] } ) + input = ch_bam_bai.combine( ch_target_bed.collect{ it[1] } ) GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict ) - GATK4_FILTERINTERVALS ( GATK4_PREPROCESSINTERVALS.out.interval_list, GATK4_COLLECTREADCOUNTS.out.tsv.collect{ it[1] }, GATK4_ANNOTATEINTERVALS.out.annotated_intervals.collect{ it[1] } ) - - GATK4_INTERVALLISTTOOLS ( GATK4_FILTERINTERVALS.out.interval_list ) - dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv .map({ meta, tsv -> [ [id:'test'], tsv ] }) .groupTuple() From 710d910df206b5a15a89928e9571ccef96dd6aa4 Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 16:12:30 +0200 Subject: [PATCH 032/136] Fix pipeline test errors --- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index e31f4979..c637edca 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -44,11 +44,7 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_GERMLINECNVCALLER.out.calls, ch_cnv_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) - ch_versions = ch_versions.mix(GATK4_PREPROCESSINTERVALS.out.versions) - ch_versions = ch_versions.mix(GATK4_ANNOTATEINTERVALS.out.versions) ch_versions = ch_versions.mix(GATK4_COLLECTREADCOUNTS.out.versions) - ch_versions = ch_versions.mix(GATK4_FILTERINTERVALS.out.versions) - ch_versions = ch_versions.mix(GATK4_INTERVALLISTTOOLS.out.versions) ch_versions = ch_versions.mix(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.versions) ch_versions = ch_versions.mix(GATK4_GERMLINECNVCALLER.out.versions) ch_versions = ch_versions.mix(GATK4_POSTPROCESSGERMLINECNVCALLS.out.versions) @@ -57,5 +53,5 @@ workflow CALL_SV_GERMLINECNVCALLER { genotyped_intervals_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.intervals // channel: [ val(meta), path(*.tar.gz) ] genotyped_segments_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.segments // channel: [ val(meta), path(*.tar.gz) ] denoised_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.denoised // channel: [ val(meta), path(*.tar.gz) ] - versions = ch_versions // channel: [ versions.yml ] + versions = ch_versions // channel: [ versions.yml ] } From 77f0e9f507c078b17061b18c3065377d9f42d1bf Mon Sep 17 00:00:00 2001 From: ryanjameskennedy Date: Mon, 17 Apr 2023 17:14:12 +0200 Subject: [PATCH 033/136] Minor test changes --- subworkflows/local/call_structural_variants.nf | 4 ++-- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 3166b7c5..97c9e100 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -39,7 +39,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_fasta_no_meta, ch_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_priors, ch_ploidy_model, ch_cnv_model ) + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_fasta_no_meta, ch_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_priors, ch_ploidy_model, ch_cnv_model) .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } @@ -55,7 +55,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .combine(vcf_list) .set { merge_input_vcfs } - SVDB_MERGE (merge_input_vcfs, ["tiddit","manta", "gcnvcaller"]) + SVDB_MERGE (merge_input_vcfs, ["tiddit","manta","gcnvcaller"]) TABIX_TABIX (SVDB_MERGE.out.vcf) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index c637edca..a714ab79 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -31,13 +31,11 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict ) dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv - .map({ meta, tsv -> [ [id:'test'], tsv ] }) .groupTuple() .map({ meta, tsv -> return [meta, tsv, [], [] ]}) GATK4_DETERMINEGERMLINECONTIGPLOIDY ( dgcp_case_input, [], ch_ploidy_model ) gcnvc_case_input = GATK4_COLLECTREADCOUNTS.out.tsv - .map({ meta, tsv -> return [[id:"test"], tsv ]}) .groupTuple() .map({ meta, tsv -> return [meta, tsv, [] ]}) GATK4_GERMLINECNVCALLER ( gcnvc_case_input, ch_cnv_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) From 3926a7c0b30cdee7a1dedc918fda233cc093f20d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Apr 2023 11:19:05 +0200 Subject: [PATCH 034/136] review suggestions --- assets/cadd_to_vcf_header_-1.0-.txt | 2 +- subworkflows/local/analyse_MT.nf | 4 ++-- subworkflows/local/annotate_snvs.nf | 10 +++++----- subworkflows/local/annotation/annotate_cadd.nf | 10 +++++----- subworkflows/local/mitochondria/merge_annotate_MT.nf | 4 ++-- workflows/raredisease.nf | 6 +++--- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/assets/cadd_to_vcf_header_-1.0-.txt b/assets/cadd_to_vcf_header_-1.0-.txt index 5d244377..8deee482 100644 --- a/assets/cadd_to_vcf_header_-1.0-.txt +++ b/assets/cadd_to_vcf_header_-1.0-.txt @@ -1 +1 @@ -##INFO= +##INFO= diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index a4c2cd26..c46b82c9 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -11,7 +11,7 @@ workflow ANALYSE_MT { take: ch_bam // channel: [mandatory] [ val(meta), file(bam), file(bai) ] ch_cadd_header // channel: [mandatory] [ path(txt) ] - ch_cadd_scores // channel: [mandatory] [ path(annotation) ] + ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_bwa_index // channel: [mandatory] [ path(index) ] ch_genome_bwamem2_index // channel: [mandatory] [ path(index) ] ch_genome_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] @@ -81,7 +81,7 @@ workflow ANALYSE_MT { ALIGN_AND_CALL_MT.out.vcf, PICARD_LIFTOVERVCF.out.vcf_lifted, ch_cadd_header, - ch_cadd_scores, + ch_cadd_resources, ch_genome_fasta_no_meta, ch_genome_dict_meta, ch_genome_dict_no_meta, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 74da97de..be1392d7 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -22,7 +22,7 @@ workflow ANNOTATE_SNVS { ch_vcf // channel: [mandatory] [ val(meta), path(vcf), path(tbi) ] analysis_type // string: [mandatory] 'wgs' or 'wes' ch_cadd_header // channel: [mandatory] [ path(txt) ] - ch_cadd_scores // channel: [mandatory] [ path(annotation) ] + ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] ch_vcfanno_lua // channel: [mandatory] [ path(lua) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] @@ -85,13 +85,13 @@ workflow ANNOTATE_SNVS { GATK4_SELECTVARIANTS.out.vcf, GATK4_SELECTVARIANTS.out.tbi, ch_cadd_header, - ch_cadd_scores + ch_cadd_resources ) - // Pick input for VEP + // If CADD is run, pick CADD output as input for VEP else pass selectvariants output to VEP. GATK4_SELECTVARIANTS.out.vcf - .combine(ANNOTATE_CADD.out.vcf.ifEmpty("null")) - .branch { it -> + .combine(ANNOTATE_CADD.out.vcf.ifEmpty("null")) // If CADD is not run then this channel will be empty, so assign a default value to allow filtering with branch operator + .branch { it -> // If CADD is run, then "it" will be [[meta],selvar.vcf,[meta],cadd.vcf], else [[meta],selvar.vcf,null] selvar: it[2].equals("null") return [it[0], it[1]] cadd: !(it[2].equals("null")) diff --git a/subworkflows/local/annotation/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf index f75fb18d..9e49c01f 100644 --- a/subworkflows/local/annotation/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -12,10 +12,10 @@ include { TABIX_TABIX as TABIX_VIEW } from '../../../modules/nf-core/tabix/t workflow ANNOTATE_CADD { take: - ch_vcf // channel: [mandatory] [ val(meta), path(vcfs) ] - ch_index // channel: [mandatory] [ val(meta), path(tbis) ] - ch_header // channel: [mandatory] [ path(txt) ] - ch_cadd_scores // channel: [mandatory] [ path(dir) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcfs) ] + ch_index // channel: [mandatory] [ val(meta), path(tbis) ] + ch_header // channel: [mandatory] [ path(txt) ] + ch_cadd_resources // channel: [mandatory] [ path(dir) ] main: ch_versions = Channel.empty() @@ -24,7 +24,7 @@ workflow ANNOTATE_CADD { TABIX_VIEW(BCFTOOLS_VIEW.out.vcf) - CADD(BCFTOOLS_VIEW.out.vcf, ch_cadd_scores) + CADD(BCFTOOLS_VIEW.out.vcf, ch_cadd_resources) TABIX_CADD(CADD.out.tsv) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index d904f500..2e17f71d 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -22,7 +22,7 @@ workflow MERGE_ANNOTATE_MT { ch_vcf1 // channel: [mandatory] [ val(meta), path(vcf) ] ch_vcf2 // channel: [mandatory] [ val(meta), path(vcf) ] ch_cadd_header // channel: [mandatory] [ path(txt) ] - ch_cadd_scores // channel: [mandatory] [ path(annotation) ] + ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ path(fasta) ] ch_genome_dict_meta // channel: [mandatory] [ val(meta), path(dict) ] ch_genome_dict_no_meta // channel: [mandatory] [ path(dict) ] @@ -99,7 +99,7 @@ workflow MERGE_ANNOTATE_MT { ch_annotation_in, TABIX_TABIX_MERGE.out.tbi, ch_cadd_header, - ch_cadd_scores + ch_cadd_resources ) // Pick input for vep diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index a3bdb7b0..20f349e1 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -142,7 +142,7 @@ workflow RAREDISEASE { // Initialize all file channels including unprocessed vcf, bed and tab files ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() - ch_cadd_scores = params.cadd_annotation ? Channel.fromPath(params.cadd_annotation).collect() + ch_cadd_resources = params.cadd_annotation ? Channel.fromPath(params.cadd_annotation).collect() : Channel.value([]) ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() : Channel.value([]) @@ -406,7 +406,7 @@ workflow RAREDISEASE { ANALYSE_MT ( ch_mapped.bam_bai, ch_cadd_header, - ch_cadd_scores, + ch_cadd_resources, ch_bwa_index, ch_bwamem2_index, ch_genome_fasta_meta, @@ -455,7 +455,7 @@ workflow RAREDISEASE { ch_vcf, params.analysis_type, ch_cadd_header, - ch_cadd_scores, + ch_cadd_resources, ch_vcfanno_resources, ch_vcfanno_lua, ch_vcfanno_toml, From b702fd2bcc549d0997b46d499bfe60b2aa792739 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 25 Apr 2023 11:22:51 +0200 Subject: [PATCH 035/136] change params name --- conf/modules/annotate_cadd.config | 2 +- docs/usage.md | 2 +- main.nf | 2 +- nextflow.config | 2 +- nextflow_schema.json | 2 +- workflows/raredisease.nf | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/conf/modules/annotate_cadd.config b/conf/modules/annotate_cadd.config index a5be41d0..2535f7f9 100644 --- a/conf/modules/annotate_cadd.config +++ b/conf/modules/annotate_cadd.config @@ -17,7 +17,7 @@ process { withName: '.*:ANNOTATE_CADD.*' { - ext.when = { (params.cadd_annotation != null) && ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } + ext.when = { (params.cadd_resources != null) && ( !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun) } } withName: '.*:ANNOTATE_CADD:BCFTOOLS_VIEW' { diff --git a/docs/usage.md b/docs/usage.md index 07f598ca..79765757 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -196,7 +196,7 @@ The mandatory and optional parameters for each category are tabulated below. | vcfanno_toml3 | vcfanno_lua | | vep_cache_version | vep_filters6 | | vep_cache | score_config_snv7 | -| | cadd_annotation8 | +| | cadd_resources8 | 1Genome version is used by VEP. You have the option to choose between GRCh37 and GRCh38.
2Path to VCF files and their indices used by vcfanno. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/vcfanno_resources.txt).
diff --git a/main.nf b/main.nf index fc1c6ca4..fad9912e 100644 --- a/main.nf +++ b/main.nf @@ -23,7 +23,7 @@ params.fasta_fai = WorkflowMain.getGenomeAttribute(params, params.bwa = WorkflowMain.getGenomeAttribute(params, 'bwa') params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') -params.cadd_annotation = WorkflowMain.getGenomeAttribute(params, 'cadd_annotation') +params.cadd_resources = WorkflowMain.getGenomeAttribute(params, 'cadd_resources') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') params.intervals_wgs = WorkflowMain.getGenomeAttribute(params, 'intervals_wgs') diff --git a/nextflow.config b/nextflow.config index 329a1e1d..6cfcaa40 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,7 +26,7 @@ params { skip_sv_annotation = false skip_mt_analysis = false gens_switch = false - cadd_annotation = null + cadd_resources = null platform = 'illumina' // Alignment diff --git a/nextflow_schema.json b/nextflow_schema.json index 4adcefe2..b25b5d73 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -103,7 +103,7 @@ "fa_icon": "fas fa-folder-open", "hidden": true }, - "cadd_annotation": { + "cadd_resources": { "type": "string", "format": "directory-path", "fa_icon": "fas fa-file", diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 20f349e1..55bc0bd0 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -14,7 +14,7 @@ def checkPathParamList = [ params.bwa, params.bwamem2, params.call_interval, - params.cadd_annotation, + params.cadd_resources, params.fasta, params.fasta_fai, params.gens_gnomad_pos, @@ -142,7 +142,7 @@ workflow RAREDISEASE { // Initialize all file channels including unprocessed vcf, bed and tab files ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() - ch_cadd_resources = params.cadd_annotation ? Channel.fromPath(params.cadd_annotation).collect() + ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() : Channel.value([]) ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() : Channel.value([]) From 8d7e8b9e07b4a01bf21489718a48448c4381a6de Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 2 May 2023 15:53:04 +0200 Subject: [PATCH 036/136] modules update --- modules.json | 38 +++++++++---------- modules/nf-core/bcftools/concat/main.nf | 6 +-- modules/nf-core/bcftools/filter/main.nf | 6 +-- modules/nf-core/bcftools/merge/main.nf | 6 +-- modules/nf-core/bcftools/norm/main.nf | 6 +-- modules/nf-core/bcftools/reheader/main.nf | 6 +-- modules/nf-core/bcftools/roh/main.nf | 6 +-- modules/nf-core/bcftools/view/main.nf | 6 +-- .../custom/dumpsoftwareversions/meta.yml | 2 + modules/nf-core/deepvariant/main.nf | 3 +- modules/nf-core/deepvariant/meta.yml | 5 +++ modules/nf-core/multiqc/meta.yml | 3 +- modules/nf-core/qualimap/bamqc/main.nf | 2 +- modules/nf-core/samtools/faidx/main.nf | 6 +-- modules/nf-core/samtools/index/main.nf | 6 +-- modules/nf-core/samtools/merge/main.nf | 6 +-- modules/nf-core/samtools/sort/main.nf | 16 ++++++-- modules/nf-core/samtools/stats/main.nf | 6 +-- modules/nf-core/tabix/bgziptabix/main.nf | 4 +- modules/nf-core/untar/main.nf | 2 +- modules/nf-core/untar/meta.yml | 1 + modules/nf-core/vcfanno/main.nf | 12 +++--- modules/nf-core/vcfanno/meta.yml | 7 +++- 23 files changed, 91 insertions(+), 70 deletions(-) diff --git a/modules.json b/modules.json index fa00b5f6..f1c0f65d 100644 --- a/modules.json +++ b/modules.json @@ -7,37 +7,37 @@ "nf-core": { "bcftools/concat": { "branch": "master", - "git_sha": "582ff1755bdd205c65e2ba4c31e0a008dae299ec", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", - "git_sha": "bcad95fb35e567ad25840d3297c3e17eff211a3a", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", - "git_sha": "bd4b60c7f9358c7146ac198fd0c4ae6355ddd086", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", "installed_by": ["modules"] }, "bwa/index": { @@ -62,12 +62,12 @@ }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "7101db4432d3268b7fcb5b8f75fa0a022dc5561b", + "git_sha": "76cc4938c1f6ea5c7d83fed1eeffc146787f9543", "installed_by": ["modules"] }, "deepvariant": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "b9829e1064382745d8dff7f1d74d2138d2864f71", "installed_by": ["modules"] }, "expansionhunter": { @@ -192,7 +192,7 @@ }, "multiqc": { "branch": "master", - "git_sha": "ee80d14721e76e2e079103b8dcd5d57129e584ba", + "git_sha": "f2d63bd5b68925f98f572eed70993d205cc694b7", "installed_by": ["modules"] }, "peddy": { @@ -242,7 +242,7 @@ }, "qualimap/bamqc": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "0a9c4eb264cce197707491861ce058a4c79d9c4f", "installed_by": ["modules"] }, "rhocall/annotate": { @@ -252,27 +252,27 @@ }, "samtools/faidx": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", "installed_by": ["modules"] }, "smncopynumbercaller": { @@ -297,7 +297,7 @@ }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "da53f7da4ff34b920bb3f186d151184bd440e3b5", "installed_by": ["modules"] }, "tabix/tabix": { @@ -322,12 +322,12 @@ }, "untar": { "branch": "master", - "git_sha": "cc1f997fab6d8fde5dc0e6e2a310814df5b53ce7", + "git_sha": "b9829e1064382745d8dff7f1d74d2138d2864f71", "installed_by": ["modules"] }, "vcfanno": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "8b97329e850add26d11d822209cc6712f829e12a", "installed_by": ["modules"] } } diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index c7c39d9f..de9ba672 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_CONCAT { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcfs), path(tbi) diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf index 4e02009d..4ee7684c 100644 --- a/modules/nf-core/bcftools/filter/main.nf +++ b/modules/nf-core/bcftools/filter/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_FILTER { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index e664f0eb..972b2a74 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_MERGE { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcfs), path(tbis) diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index 90387d6c..efd5bb91 100644 --- a/modules/nf-core/bcftools/norm/main.nf +++ b/modules/nf-core/bcftools/norm/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_NORM { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/reheader/main.nf b/modules/nf-core/bcftools/reheader/main.nf index 57634c07..d817af23 100644 --- a/modules/nf-core/bcftools/reheader/main.nf +++ b/modules/nf-core/bcftools/reheader/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_REHEADER { tag "$meta.id" label 'process_low' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(header) diff --git a/modules/nf-core/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf index dc516b02..46243411 100644 --- a/modules/nf-core/bcftools/roh/main.nf +++ b/modules/nf-core/bcftools/roh/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_ROH { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index 04ced9c9..01a58823 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -2,10 +2,10 @@ process BCFTOOLS_VIEW { tag "$meta.id" label 'process_medium' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/custom/dumpsoftwareversions/meta.yml b/modules/nf-core/custom/dumpsoftwareversions/meta.yml index 60b546a0..c32657de 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/meta.yml +++ b/modules/nf-core/custom/dumpsoftwareversions/meta.yml @@ -1,7 +1,9 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: custom_dumpsoftwareversions description: Custom module used to dump software versions within the nf-core pipeline template keywords: - custom + - dump - version tools: - custom: diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index 7e11b766..afc5e444 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -2,7 +2,7 @@ process DEEPVARIANT { tag "$meta.id" label 'process_medium' - container "google/deepvariant:1.4.0" + container "docker.io/google/deepvariant:1.4.0" // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { @@ -13,6 +13,7 @@ process DEEPVARIANT { tuple val(meta), path(input), path(index), path(intervals) path(fasta) path(fai) + path(gzi) output: tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml index 7ecb40f2..97f068ec 100644 --- a/modules/nf-core/deepvariant/meta.yml +++ b/modules/nf-core/deepvariant/meta.yml @@ -3,6 +3,7 @@ description: DeepVariant is an analysis pipeline that uses a deep neural network keywords: - variant calling - machine learning + - neural network tools: - deepvariant: description: DeepVariant is an analysis pipeline that uses a deep neural network to call genetic variants from next-generation DNA sequencing data @@ -38,6 +39,10 @@ input: type: file description: Index of reference fasta file pattern: "*.fai" + - gzi: + type: file + description: GZI index of reference fasta file + pattern: "*.gzi" output: - meta: diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index ebc29b27..f93b5ee5 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,3 +1,4 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json name: MultiQC description: Aggregate results from bioinformatics analyses across many samples into a single report keywords: @@ -37,7 +38,7 @@ output: description: MultiQC report file pattern: "multiqc_report.html" - data: - type: dir + type: directory description: MultiQC data dir pattern: "multiqc_data" - plots: diff --git a/modules/nf-core/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf index 810cf402..be505f56 100644 --- a/modules/nf-core/qualimap/bamqc/main.nf +++ b/modules/nf-core/qualimap/bamqc/main.nf @@ -34,7 +34,7 @@ process QUALIMAP_BAMQC { } """ unset DISPLAY - mkdir tmp + mkdir -p tmp export _JAVA_OPTIONS=-Djava.io.tmpdir=./tmp qualimap \\ --java-mem-size=$memory \\ diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index ce6580d2..21be8bad 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_FAIDX { tag "$fasta" label 'process_single' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 8b95687a..19d25cae 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_INDEX { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index a80ff3a2..ebd64221 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_MERGE { tag "$meta.id" label 'process_low' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 84c167cd..933ebbe9 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_SORT { tag "$meta.id" label 'process_medium' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(bam) @@ -21,9 +21,17 @@ process SAMTOOLS_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def sort_memory = (task.memory.mega/task.cpus).intValue() if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ - samtools sort $args -@ $task.cpus -o ${prefix}.bam -T $prefix $bam + samtools sort \\ + $args \\ + -@ $task.cpus \\ + -m ${sort_memory}M \\ + -o ${prefix}.bam \\ + -T $prefix \\ + $bam + cat <<-END_VERSIONS > versions.yml "${task.process}": samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 0a2a3640..8dbcc53b 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -2,10 +2,10 @@ process SAMTOOLS_STATS { tag "$meta.id" label 'process_single' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index d3a3bbff..120aa114 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -34,8 +34,8 @@ process TABIX_BGZIPTABIX { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.gz - touch ${prefix}.gz.tbi + touch ${prefix}.${input.getExtension()}.gz + touch ${prefix}.${input.getExtension()}.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 3384847a..67f497ee 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -5,7 +5,7 @@ process UNTAR { conda "conda-forge::sed=4.7 bioconda::grep=3.4 conda-forge::tar=1.34" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'ubuntu:20.04' }" + 'docker.io/ubuntu:20.04' }" input: tuple val(meta), path(archive) diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml index ea7a3f38..db241a6e 100644 --- a/modules/nf-core/untar/meta.yml +++ b/modules/nf-core/untar/meta.yml @@ -3,6 +3,7 @@ description: Extract files. keywords: - untar - uncompress + - extract tools: - untar: description: | diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index 2d5d162a..86a11992 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -8,7 +8,7 @@ process VCFANNO { 'quay.io/biocontainers/vcfanno:0.3.3--h9ee0642_0' }" input: - tuple val(meta), path(vcf), path(tbi) + tuple val(meta), path(vcf), path(tbi), path(specific_resources) path toml path lua path resources @@ -26,11 +26,11 @@ process VCFANNO { def lua_cmd = lua ? "--lua ${lua}" : "" """ vcfanno \\ - -p $task.cpus \\ - $args \\ - $lua_cmd \\ - $toml \\ - $vcf \\ + -p ${task.cpus} \\ + ${args} \\ + ${lua_cmd} \\ + ${toml} \\ + ${vcf} \\ > ${prefix}.vcf cat <<-END_VERSIONS > versions.yml diff --git a/modules/nf-core/vcfanno/meta.yml b/modules/nf-core/vcfanno/meta.yml index 9e6c1d72..86fea0c4 100644 --- a/modules/nf-core/vcfanno/meta.yml +++ b/modules/nf-core/vcfanno/meta.yml @@ -30,6 +30,9 @@ input: type: file description: tabix index of query VCF - only needed if vcf is compressed pattern: "*.vcf.gz.tbi" + - specific_resources: + type: map + description: A list of sample specific reference files defined in toml config, must also include indices if bgzipped. - toml: type: file description: configuration file with reference file basenames @@ -39,8 +42,8 @@ input: description: Lua file for custom annotations pattern: "*.lua" - resources: - type: list - description: List of reference files defined in toml config, must also include indices. + type: map + description: List of reference files defined in toml config, must also include indices if bgzipped. output: - meta: From 7e6756287d3806d12261ad2f511db5a667037027 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 5 May 2023 15:14:40 +0200 Subject: [PATCH 037/136] add feature to convert bam to cram --- conf/modules/align.config | 11 ++++ conf/modules/align_bwamem2.config | 2 + conf/modules/align_sentieon.config | 1 + modules.json | 5 ++ modules/nf-core/samtools/view/main.nf | 66 +++++++++++++++++++++ modules/nf-core/samtools/view/meta.yml | 79 ++++++++++++++++++++++++++ nextflow.config | 1 + nextflow_schema.json | 6 ++ subworkflows/local/align.nf | 4 ++ 9 files changed, 175 insertions(+) create mode 100644 modules/nf-core/samtools/view/main.nf create mode 100644 modules/nf-core/samtools/view/meta.yml diff --git a/conf/modules/align.config b/conf/modules/align.config index be3fee28..249dc81e 100644 --- a/conf/modules/align.config +++ b/conf/modules/align.config @@ -17,4 +17,15 @@ process{ enabled: false ] } + + withName: '.*ALIGN:SAMTOOLS_VIEW' { + ext.args = { '--output-fmt cram --write-index' } + ext.when = params.save_mapped_as_cram + publishDir = [ + path: { "${params.outdir}/alignment" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + + } } diff --git a/conf/modules/align_bwamem2.config b/conf/modules/align_bwamem2.config index f4f062e6..7d478222 100644 --- a/conf/modules/align_bwamem2.config +++ b/conf/modules/align_bwamem2.config @@ -35,6 +35,7 @@ process { withName: '.*ALIGN:ALIGN_BWAMEM2:MARKDUPLICATES' { ext.prefix = { "${meta.id}_sorted_md" } publishDir = [ + enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -43,6 +44,7 @@ process { withName: '.*ALIGN:ALIGN_BWAMEM2:SAMTOOLS_INDEX_MARKDUP' { publishDir = [ + enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/conf/modules/align_sentieon.config b/conf/modules/align_sentieon.config index 42073097..a882a017 100644 --- a/conf/modules/align_sentieon.config +++ b/conf/modules/align_sentieon.config @@ -41,6 +41,7 @@ process { ext.args = { $params.rmdup ? "--rmdup" : '' } ext.prefix = { "${meta.id}_dedup" } publishDir = [ + enabled: !params.save_mapped_as_cram, path: { "${params.outdir}/alignment" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/modules.json b/modules.json index c2511f70..b04e2046 100644 --- a/modules.json +++ b/modules.json @@ -285,6 +285,11 @@ "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", "installed_by": ["modules"] }, + "samtools/view": { + "branch": "master", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "installed_by": ["modules"] + }, "smncopynumbercaller": { "branch": "master", "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf new file mode 100644 index 00000000..b87369e5 --- /dev/null +++ b/modules/nf-core/samtools/view/main.nf @@ -0,0 +1,66 @@ +process SAMTOOLS_VIEW { + tag "$meta.id" + label 'process_low' + + conda "bioconda::samtools=1.17" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" + + input: + tuple val(meta), path(input), path(index) + path fasta + path qname + + output: + tuple val(meta), path("*.bam"), emit: bam, optional: true + tuple val(meta), path("*.cram"), emit: cram, optional: true + tuple val(meta), path("*.sam"), emit: sam, optional: true + tuple val(meta), path("*.bai"), emit: bai, optional: true + tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val(meta), path("*.crai"), emit: crai, optional: true + path "versions.yml", emit: versions + + 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 reference = fasta ? "--reference ${fasta}" : "" + def readnames = qname ? "--qname-file ${qname}": "" + def file_type = args.contains("--output-fmt sam") ? "sam" : + args.contains("--output-fmt bam") ? "bam" : + args.contains("--output-fmt cram") ? "cram" : + input.getExtension() + if ("$input" == "${prefix}.${file_type}") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" + """ + samtools \\ + view \\ + --threads ${task.cpus-1} \\ + ${reference} \\ + ${readnames} \\ + $args \\ + -o ${prefix}.${file_type} \\ + $input \\ + $args2 + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bam + touch ${prefix}.cram + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml new file mode 100644 index 00000000..76916033 --- /dev/null +++ b/modules/nf-core/samtools/view/meta.yml @@ -0,0 +1,79 @@ +name: samtools_view +description: filter/convert SAM/BAM/CRAM file +keywords: + - view + - bam + - sam + - cram +tools: + - samtools: + description: | + SAMtools is a set of utilities for interacting with and post-processing + short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li. + These files are generated as output by short read aligners like BWA. + homepage: http://www.htslib.org/ + documentation: http://www.htslib.org/doc/samtools.html + doi: 10.1093/bioinformatics/btp352 + licence: ["MIT"] +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - input: + type: file + description: BAM/CRAM/SAM file + pattern: "*.{bam,cram,sam}" + - index: + type: optional file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file + pattern: "*.{.bai,.csi,.crai}" + - fasta: + type: optional file + description: Reference file the CRAM was created with + pattern: "*.{fasta,fa}" + - qname: + type: file + description: Optional file with read names to output only select alignments + pattern: "*.{txt,list}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: optional filtered/converted BAM file + pattern: "*.{bam}" + - cram: + type: file + description: optional filtered/converted CRAM file + pattern: "*.{cram}" + - sam: + type: file + description: optional filtered/converted SAM file + pattern: "*.{sam}" + # bai, csi, and crai are created with `--write-index` + - bai: + type: file + description: optional BAM file index + pattern: "*.{bai}" + - csi: + type: file + description: optional tabix BAM file index + pattern: "*.{csi}" + - crai: + type: file + description: optional CRAM file index + pattern: "*.{crai}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@drpatelh" + - "@joseespinosa" + - "@FriederikeHanssen" + - "@priyanka-surana" diff --git a/nextflow.config b/nextflow.config index 923cac0f..5a91dcfb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -22,6 +22,7 @@ params { // Main options analysis_type = 'wgs' + save_mapped_as_cram = false skip_snv_annotation = false skip_sv_annotation = false skip_mt_analysis = false diff --git a/nextflow_schema.json b/nextflow_schema.json index b25b5d73..f63684b6 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -395,6 +395,12 @@ "fa_icon": "fas fa-book", "enum": ["wgs", "wes", "mito"] }, + "save_mapped_as_cram": { + "type": "boolean", + "default": false, + "description": "Specifies whether to generate and publish alignment files as cram instead of bam", + "fa_icon": "fas fa-book" + }, "skip_snv_annotation": { "type": "boolean", "default": false, diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 4d53765f..208f4cd0 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -4,6 +4,7 @@ include { ALIGN_BWAMEM2 } from './alignment/align_bwamem2' include { ALIGN_SENTIEON } from './alignment/align_sentieon' +include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' workflow ALIGN { take: @@ -40,6 +41,9 @@ workflow ALIGN { ch_marked_bam = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bam, ALIGN_SENTIEON.out.marked_bam) ch_marked_bai = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bai, ALIGN_SENTIEON.out.marked_bai) ch_bam_bai = ch_marked_bam.join(ch_marked_bai, failOnMismatch:true, failOnDuplicate:true) + + SAMTOOLS_VIEW( ch_bam_bai, ch_fasta, [] ) + ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) emit: From 12217db41c8a44f28ef21766da440d07473d4621 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 5 May 2023 15:21:19 +0200 Subject: [PATCH 038/136] update citations --- CITATIONS.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index ec755b55..cf2f74f9 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -10,7 +10,7 @@ ## Pipeline tools -- [BCFtools](https://academic.oup.com/gigascience/article/10/2/giab008/6137722) +- [BCFtools](https://academic.oup.com/gigascience/article/10/2/giab008/6137722) & [SAMtools](https://academic.oup.com/bioinformatics/article/25/16/2078/204688) > Danecek P, Bonfield JK, Liddle J, et al. Twelve years of SAMtools and BCFtools. GigaScience. 2021;10(2):giab008. doi:10.1093/gigascience/giab008 @@ -86,10 +86,6 @@ - [rhocall](https://github.com/dnil/rhocall) -- [SAMtools](https://academic.oup.com/bioinformatics/article/25/16/2078/204688) - - > Li H, Handsaker B, Wysoker A, et al. The Sequence Alignment/Map format and SAMtools. Bioinformatics. 2009;25(16):2078-2079. doi:10.1093/bioinformatics/btp352 - - [Sentieon DNAscope](https://www.biorxiv.org/content/10.1101/2022.05.20.492556v1.abstract) > Freed D, Pan R, Chen H, Li Z, Hu J, Aldana R. DNAscope: High Accuracy Small Variant Calling Using Machine Learning. Bioinformatics; 2022. doi:10.1101/2022.05.20.492556 From e19a6201e7630d6e80fff23d2854960355fa2f34 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 8 May 2023 21:40:08 +0200 Subject: [PATCH 039/136] wes fixes --- conf/modules/annotate_snvs.config | 20 -------------------- conf/modules/prepare_references.config | 10 +++++----- conf/modules/qc_bam.config | 1 + subworkflows/local/call_repeat_expansions.nf | 3 +++ workflows/raredisease.nf | 2 +- 5 files changed, 10 insertions(+), 26 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 7df621a8..c012335b 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -48,7 +48,6 @@ process { withName: '.*ANNOTATE_SNVS:GATK4_SELECTVARIANTS' { ext.prefix = { "${meta.id}_${intervals.simpleName}" } - ext.when = { !(params.analysis_type == "wes") } } withName: '.*ANNOTATE_SNVS:ENSEMBLVEP_SNV' { @@ -68,28 +67,11 @@ process { '--merged --polyphen p --protein --offline --regulatory --sift p --symbol --tsl', '--uniprot --vcf' ].join(' ') - publishDir = [ - enabled: params.analysis_type.equals('wes'), - path: { "${params.outdir}/annotate_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: '.*ANNOTATE_SNVS:TABIX_VEP' { - publishDir = [ - enabled: params.analysis_type.equals('wes'), - path: { "${params.outdir}/annotate_snv" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] } withName: '.*ANNOTATE_SNVS:BCFTOOLS_CONCAT' { ext.prefix = { "${meta.id}_rohann_vcfanno_filter_vep" } - ext.when = { !(params.analysis_type == "wes") } publishDir = [ - enabled: !params.analysis_type.equals('wes'), path: { "${params.outdir}/annotate_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } @@ -97,9 +79,7 @@ process { } withName: '.*ANNOTATE_SNVS:TABIX_BCFTOOLS_CONCAT' { - ext.when = { !(params.analysis_type == "wes") } publishDir = [ - enabled: !params.analysis_type.equals('wes'), path: { "${params.outdir}/annotate_snv" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 8ea76ec6..b586cf8b 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -77,20 +77,20 @@ process { } withName: '.*PREPARE_REFERENCES:TABIX_PT' { - ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } + ext.when = { params.target_bed && params.target_bed.endsWith(".gz") && (params.analysis_type == "wes") } } withName: '.*PREPARE_REFERENCES:TABIX_PBT' { - ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } + ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") && (params.analysis_type == "wes") } } withName: '.*PREPARE_REFERENCES:GATK_BILT' { - ext.when = { params.target_bed } + ext.when = { params.target_bed && (params.analysis_type == "wes") } ext.prefix = { "${meta.id}_target" } } withName: '.*PREPARE_REFERENCES:GATK_ILT' { - ext.when = { params.target_bed } + ext.when = { params.target_bed && (params.analysis_type == "wes") } ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' publishDir = [ enabled: false @@ -98,7 +98,7 @@ process { } withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { - ext.when = { params.target_bed } + ext.when = { params.target_bed && (params.analysis_type == "wes") } ext.prefix = { "${meta.id}" } } diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 0f5f411f..9f749ada 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -29,6 +29,7 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { + ext.when = { params.analysis_type.equals("wes") } ext.prefix = { "${meta.id}_hsmetrics" } } diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 66dea07d..a4ebe5ed 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -48,10 +48,13 @@ workflow CALL_REPEAT_EXPANSIONS { SPLIT_MULTIALLELICS_EXP.out.vcf .collect{it[1]} .toList() + .collect() .set {ch_exp_vcfs} + ch_case_info .combine(ch_exp_vcfs) .set {ch_svdb_merge_input} + SVDB_MERGE_REPEATS ( ch_svdb_merge_input, [] ) // Annotate, compress and index diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8d38371b..a4314da3 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -171,7 +171,7 @@ workflow RAREDISEASE { ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() : Channel.value([]) ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([]) + : Channel.value([[],[]]) ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog).collect() : Channel.value([]) ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true).collect() From 79f60f14a80ef83684c8e87ab895b964ceebcb58 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 8 May 2023 22:54:27 +0200 Subject: [PATCH 040/136] update anno_snv --- subworkflows/local/annotate_snvs.nf | 32 ++++++++++++----------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 54d09e95..cd665e60 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -85,28 +85,22 @@ workflow ANNOTATE_SNVS { TABIX_VEP (ENSEMBLVEP_SNV.out.vcf_gz) - ch_vep_ann = ENSEMBLVEP_SNV.out.vcf_gz - ch_vep_index = TABIX_VEP.out.tbi - - if (params.analysis_type == 'wgs') { - - ENSEMBLVEP_SNV.out.vcf_gz - .join(TABIX_VEP.out.tbi, failOnMismatch:true) - .groupTuple() - .map { meta, vcfs, tbis -> - def sortedvcfs = vcfs.sort { it.baseName } - def sortedtbis = tbis.sort { it.baseName } - return [ meta, sortedvcfs, sortedtbis ] - } - .set { ch_concat_in } + ENSEMBLVEP_SNV.out.vcf_gz + .join(TABIX_VEP.out.tbi, failOnMismatch:true) + .groupTuple() + .map { meta, vcfs, tbis -> + def sortedvcfs = vcfs.sort { it.baseName } + def sortedtbis = tbis.sort { it.baseName } + return [ meta, sortedvcfs, sortedtbis ] + } + .set { ch_concat_in } - BCFTOOLS_CONCAT (ch_concat_in) + BCFTOOLS_CONCAT (ch_concat_in) - TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) + TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) - ch_vep_ann = BCFTOOLS_CONCAT.out.vcf - ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi - } + ch_vep_ann = BCFTOOLS_CONCAT.out.vcf + ch_vep_index = TABIX_BCFTOOLS_CONCAT.out.tbi ch_versions = ch_versions.mix(BCFTOOLS_ROH.out.versions) ch_versions = ch_versions.mix(RHOCALL_ANNOTATE.out.versions) From a512bcbc64169bb1f99598aab72dd6a0978d941a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 9 May 2023 14:13:34 +0200 Subject: [PATCH 041/136] update vcfanno calls --- subworkflows/local/annotate_snvs.nf | 6 +++++- subworkflows/local/mitochondria/merge_annotate_MT.nf | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index bde73238..78de7999 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -61,7 +61,11 @@ workflow ANNOTATE_SNVS { ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) - VCFANNO (ZIP_TABIX_ROHCALL.out.gz_tbi, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) + ZIP_TABIX_ROHCALL.out.gz_tbi + .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} + .set { ch_vcf_in } + + VCFANNO (ch_vcf_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 8e8f90d8..b1427858 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -133,7 +133,11 @@ workflow MERGE_ANNOTATE_MT { // Running vcfanno TABIX_TABIX_MT3(ENSEMBLVEP_MT.out.vcf_gz) - ch_in_vcfanno = ENSEMBLVEP_MT.out.vcf_gz.join(TABIX_TABIX_MT3.out.tbi, failOnMismatch:true, failOnDuplicate:true) + ENSEMBLVEP_MT.out.vcf_gz + .join(TABIX_TABIX_MT3.out.tbi, failOnMismatch:true, failOnDuplicate:true) + .map { meta, vcf, tbi -> return [meta, vcf, tbi, []]} + .set { ch_in_vcfanno } + VCFANNO_MT(ch_in_vcfanno, ch_vcfanno_toml, [], ch_vcfanno_resources) ZIP_TABIX_VCFANNO(VCFANNO_MT.out.vcf) From 127af4f88ccd5dd819dda4581b3cae466ea18b19 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 9 May 2023 16:42:11 +0200 Subject: [PATCH 042/136] add a linebreak --- subworkflows/local/annotate_snvs.nf | 1 + 1 file changed, 1 insertion(+) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 78de7999..b24cd171 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -134,6 +134,7 @@ workflow ANNOTATE_SNVS { .set { ch_concat_in } BCFTOOLS_CONCAT (ch_concat_in) + TABIX_BCFTOOLS_CONCAT (BCFTOOLS_CONCAT.out.vcf) ch_vep_ann = BCFTOOLS_CONCAT.out.vcf From 25de1acddf2b06e7aca068bf16809ab295340c98 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 May 2023 17:36:13 +0200 Subject: [PATCH 043/136] update qc config --- conf/modules/qc_bam.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/qc_bam.config b/conf/modules/qc_bam.config index 9f749ada..080f988f 100644 --- a/conf/modules/qc_bam.config +++ b/conf/modules/qc_bam.config @@ -29,7 +29,7 @@ process { } withName: '.*QC_BAM:PICARD_COLLECTHSMETRICS' { - ext.when = { params.analysis_type.equals("wes") } + ext.when = { params.target_bed } ext.prefix = { "${meta.id}_hsmetrics" } } From 63a1f3825349894c9a53711646138de619730371 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 10 May 2023 19:01:17 +0200 Subject: [PATCH 044/136] review --- conf/modules/prepare_references.config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 3bf45023..7f4b27cd 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -77,20 +77,20 @@ process { } withName: '.*PREPARE_REFERENCES:TABIX_PT' { - ext.when = { params.target_bed && params.target_bed.endsWith(".gz") && (params.analysis_type == "wes") } + ext.when = { params.target_bed && params.target_bed.endsWith(".gz") } } withName: '.*PREPARE_REFERENCES:TABIX_PBT' { - ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") && (params.analysis_type == "wes") } + ext.when = { params.target_bed && !params.target_bed.endsWith(".gz") } } withName: '.*PREPARE_REFERENCES:GATK_BILT' { - ext.when = { params.target_bed && (params.analysis_type == "wes") } + ext.when = { params.target_bed } ext.prefix = { "${meta.id}_target" } } withName: '.*PREPARE_REFERENCES:GATK_ILT' { - ext.when = { params.target_bed && (params.analysis_type == "wes") } + ext.when = { params.target_bed } ext.args = '--PADDING 100 -SUBDIVISION_MODE INTERVAL_SUBDIVISION --SCATTER_COUNT 2' publishDir = [ enabled: false @@ -98,7 +98,7 @@ process { } withName: '.*PREPARE_REFERENCES:CAT_CAT_BAIT' { - ext.when = { params.target_bed && (params.analysis_type == "wes") } + ext.when = { params.target_bed } ext.prefix = { "${meta.id}" } } From c6f1a8dc050409975c3679b08b7dbf8100beac19 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 22 May 2023 16:17:19 +0200 Subject: [PATCH 045/136] update modules --- modules.json | 132 +++++++++--------- modules/nf-core/bcftools/annotate/main.nf | 9 +- modules/nf-core/bcftools/concat/main.nf | 2 +- modules/nf-core/bcftools/filter/main.nf | 2 +- modules/nf-core/bcftools/merge/main.nf | 8 +- modules/nf-core/bcftools/merge/meta.yml | 25 +++- modules/nf-core/bcftools/norm/main.nf | 4 +- modules/nf-core/bcftools/norm/meta.yml | 6 + modules/nf-core/bcftools/reheader/main.nf | 4 +- modules/nf-core/bcftools/reheader/meta.yml | 6 + modules/nf-core/bcftools/roh/main.nf | 2 +- modules/nf-core/bcftools/view/main.nf | 2 +- modules/nf-core/bwa/index/main.nf | 2 +- modules/nf-core/bwamem2/index/main.nf | 2 +- modules/nf-core/bwamem2/mem/main.nf | 2 +- modules/nf-core/bwamem2/mem/meta.yml | 5 + modules/nf-core/cadd/main.nf | 2 +- modules/nf-core/cadd/meta.yml | 1 + modules/nf-core/cat/cat/main.nf | 2 +- .../custom/dumpsoftwareversions/main.nf | 2 +- modules/nf-core/deepvariant/main.nf | 23 +-- modules/nf-core/deepvariant/meta.yml | 16 +++ modules/nf-core/fastqc/main.nf | 2 +- .../nf-core/gatk4/bedtointervallist/main.nf | 4 +- .../nf-core/gatk4/bedtointervallist/meta.yml | 7 + .../gatk4/createsequencedictionary/main.nf | 8 +- .../gatk4/createsequencedictionary/meta.yml | 7 + .../nf-core/gatk4/filtermutectcalls/main.nf | 10 +- .../nf-core/gatk4/filtermutectcalls/meta.yml | 24 +++- .../nf-core/gatk4/intervallisttools/main.nf | 2 +- .../nf-core/gatk4/mergebamalignment/main.nf | 6 +- .../nf-core/gatk4/mergebamalignment/meta.yml | 13 ++ modules/nf-core/gatk4/mergevcfs/main.nf | 2 +- modules/nf-core/gatk4/mutect2/main.nf | 16 +-- modules/nf-core/gatk4/mutect2/meta.yml | 20 ++- modules/nf-core/gatk4/printreads/main.nf | 6 +- modules/nf-core/gatk4/printreads/meta.yml | 14 +- modules/nf-core/gatk4/revertsam/main.nf | 2 +- modules/nf-core/gatk4/samtofastq/main.nf | 2 +- modules/nf-core/gatk4/selectvariants/main.nf | 2 +- modules/nf-core/gatk4/splitintervals/main.nf | 8 +- modules/nf-core/gatk4/splitintervals/meta.yml | 19 ++- .../nf-core/gatk4/variantfiltration/main.nf | 8 +- .../nf-core/gatk4/variantfiltration/meta.yml | 17 +++ modules/nf-core/genmod/annotate/main.nf | 2 +- modules/nf-core/genmod/compound/main.nf | 2 +- modules/nf-core/genmod/models/main.nf | 2 +- modules/nf-core/genmod/score/main.nf | 2 +- modules/nf-core/glnexus/main.nf | 2 +- modules/nf-core/haplocheck/main.nf | 2 +- modules/nf-core/haplogrep2/classify/main.nf | 2 +- modules/nf-core/manta/germline/main.nf | 6 +- modules/nf-core/manta/germline/meta.yml | 12 +- modules/nf-core/mosdepth/main.nf | 2 +- modules/nf-core/multiqc/main.nf | 2 +- modules/nf-core/peddy/main.nf | 2 +- .../picard/addorreplacereadgroups/main.nf | 2 +- .../nf-core/picard/collecthsmetrics/main.nf | 31 +++- .../nf-core/picard/collecthsmetrics/meta.yml | 24 ++-- .../picard/collectmultiplemetrics/main.nf | 2 +- .../nf-core/picard/collectwgsmetrics/main.nf | 4 +- .../nf-core/picard/collectwgsmetrics/meta.yml | 3 +- modules/nf-core/picard/liftovervcf/main.nf | 8 +- modules/nf-core/picard/liftovervcf/meta.yml | 27 +++- modules/nf-core/picard/markduplicates/main.nf | 6 +- .../nf-core/picard/markduplicates/meta.yml | 11 ++ .../nf-core/picard/renamesampleinvcf/main.nf | 2 +- modules/nf-core/picard/sortvcf/main.nf | 10 +- modules/nf-core/picard/sortvcf/meta.yml | 19 +++ modules/nf-core/qualimap/bamqc/main.nf | 2 +- modules/nf-core/rhocall/annotate/main.nf | 2 +- modules/nf-core/samtools/faidx/main.nf | 2 +- modules/nf-core/samtools/index/main.nf | 2 +- modules/nf-core/samtools/merge/main.nf | 6 +- modules/nf-core/samtools/merge/meta.yml | 19 ++- modules/nf-core/samtools/sort/main.nf | 2 +- modules/nf-core/samtools/stats/main.nf | 4 +- modules/nf-core/samtools/stats/meta.yml | 10 +- modules/nf-core/smncopynumbercaller/main.nf | 2 +- modules/nf-core/stranger/main.nf | 2 +- modules/nf-core/svdb/merge/main.nf | 2 +- modules/nf-core/svdb/merge/meta.yml | 2 + modules/nf-core/svdb/query/main.nf | 2 +- modules/nf-core/tabix/bgziptabix/main.nf | 4 +- modules/nf-core/tabix/bgziptabix/meta.yml | 5 + modules/nf-core/tabix/tabix/main.nf | 2 +- modules/nf-core/tiddit/cov/main.nf | 4 +- modules/nf-core/tiddit/cov/meta.yml | 6 + modules/nf-core/tiddit/sv/main.nf | 2 +- modules/nf-core/ucsc/wigtobigwig/main.nf | 2 +- modules/nf-core/untar/main.nf | 2 +- modules/nf-core/vcfanno/main.nf | 2 +- 92 files changed, 501 insertions(+), 232 deletions(-) diff --git a/modules.json b/modules.json index 7ad0f417..71faa97f 100644 --- a/modules.json +++ b/modules.json @@ -7,77 +7,77 @@ "nf-core": { "bcftools/annotate": { "branch": "master", - "git_sha": "00567d35852dfde7e30a707b8d2e415dfa9d5970", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", - "git_sha": "fa12afdf5874c1d11e4a20efe81c97935e8eea24", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bwa/index": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", "installed_by": ["modules"] }, "cadd": { "branch": "master", - "git_sha": "2e2f8581f4d2ab4729c2b7bd5da8400b54fb8fdf", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", "installed_by": ["modules"] }, "cat/cat": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", - "git_sha": "76cc4938c1f6ea5c7d83fed1eeffc146787f9543", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "deepvariant": { "branch": "master", - "git_sha": "b9829e1064382745d8dff7f1d74d2138d2864f71", + "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", "installed_by": ["modules"] }, "expansionhunter": { @@ -87,202 +87,202 @@ }, "fastqc": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "genmod/models": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "genmod/score": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "glnexus": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "haplocheck": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "manta/germline": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", "installed_by": ["modules"] }, "mosdepth": { "branch": "master", - "git_sha": "783cc040350dbee673fd57f6a6300aea3d085b7c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "multiqc": { "branch": "master", - "git_sha": "f2d63bd5b68925f98f572eed70993d205cc694b7", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "peddy": { "branch": "master", - "git_sha": "21e6e085967902fb393b27b2e7590ac4c85fab8e", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", - "git_sha": "28995552268a117551ded48dadcf42b0caf0e834", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "0ce3ab0ac301f160225b22254fa238478b4389f2", "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", - "git_sha": "75027bf77472b1f4fd2cdd7e46f83119dfb0f2c6", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", - "git_sha": "0a9c4eb264cce197707491861ce058a4c79d9c4f", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/index": { "branch": "master", - "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", + "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", - "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "371eff7748d769c2ddc8bd593773523a364a52fe", + "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", "installed_by": ["modules"] }, "samtools/view": { @@ -292,57 +292,57 @@ }, "smncopynumbercaller": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "stranger": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", "installed_by": ["modules"] }, "svdb/query": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "da53f7da4ff34b920bb3f186d151184bd440e3b5", + "git_sha": "01b3b2509d76625b6d6cd613b349fb4777712a15", "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", - "git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c", + "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", - "git_sha": "0367c23758d83fc6973a8cd35ecba40a0cfcf2af", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "0f8a77ff00e65eaeebc509b8156eaa983192474b", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "untar": { "branch": "master", - "git_sha": "b9829e1064382745d8dff7f1d74d2138d2864f71", + "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", "installed_by": ["modules"] }, "vcfanno": { "branch": "master", - "git_sha": "8b97329e850add26d11d822209cc6712f829e12a", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] } } diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf index c529f2c2..49eec2e8 100644 --- a/modules/nf-core/bcftools/annotate/main.nf +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -2,14 +2,13 @@ process BCFTOOLS_ANNOTATE { tag "$meta.id" label 'process_low' - conda "bioconda::bcftools=1.16" + conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.16--hfe4b78e_1': - 'quay.io/biocontainers/bcftools:1.16--hfe4b78e_1' }" + 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: - tuple val(meta), path(input), path(index), path(annotations), path(annotations_index) - path(header_lines) + tuple val(meta), path(input), path(index), path(annotations), path(annotations_index), path(header_lines) output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index de9ba672..244a42cc 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -5,7 +5,7 @@ process BCFTOOLS_CONCAT { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcfs), path(tbi) diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf index 4ee7684c..07f33a2e 100644 --- a/modules/nf-core/bcftools/filter/main.nf +++ b/modules/nf-core/bcftools/filter/main.nf @@ -5,7 +5,7 @@ process BCFTOOLS_FILTER { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index 972b2a74..76b35345 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -5,13 +5,13 @@ process BCFTOOLS_MERGE { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcfs), path(tbis) - path bed - path fasta - path fasta_fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + path(bed) output: tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: merged_variants diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml index 53dc23eb..7bbe5216 100644 --- a/modules/nf-core/bcftools/merge/meta.yml +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -19,27 +19,37 @@ input: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - vcfs: - type: files + type: file description: | List containing 2 or more vcf files e.g. [ 'file1.vcf', 'file2.vcf' ] - tbis: - type: files + type: file description: | List containing the tbi index files corresponding to the vcfs input files e.g. [ 'file1.vcf.tbi', 'file2.vcf.tbi' ] - - bed: - type: file - description: "(Optional) The bed regions to merge on" - pattern: "*.bed" + - 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}" - - fasta: + - 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" + - bed: + type: file + description: "(Optional) The bed regions to merge on" + pattern: "*.bed" output: - meta: type: map @@ -70,3 +80,4 @@ authors: - "@joseespinosa" - "@drpatelh" - "@nvnieuwk" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index efd5bb91..608f20a1 100644 --- a/modules/nf-core/bcftools/norm/main.nf +++ b/modules/nf-core/bcftools/norm/main.nf @@ -5,11 +5,11 @@ process BCFTOOLS_NORM { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(tbi) - path(fasta) + tuple val(meta2), path(fasta) output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}") , emit: vcf diff --git a/modules/nf-core/bcftools/norm/meta.yml b/modules/nf-core/bcftools/norm/meta.yml index c3ea2c03..33ebea36 100644 --- a/modules/nf-core/bcftools/norm/meta.yml +++ b/modules/nf-core/bcftools/norm/meta.yml @@ -30,6 +30,11 @@ input: description: | An optional index of the VCF file (for when the VCF is compressed) pattern: "*.vcf.gz.tbi" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: FASTA reference file @@ -50,3 +55,4 @@ output: pattern: "versions.yml" authors: - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/reheader/main.nf b/modules/nf-core/bcftools/reheader/main.nf index d817af23..28d567a2 100644 --- a/modules/nf-core/bcftools/reheader/main.nf +++ b/modules/nf-core/bcftools/reheader/main.nf @@ -5,11 +5,11 @@ process BCFTOOLS_REHEADER { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(header) - path fai + tuple val(meta2), path(fai) output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf diff --git a/modules/nf-core/bcftools/reheader/meta.yml b/modules/nf-core/bcftools/reheader/meta.yml index 44d75fdf..60704ab4 100644 --- a/modules/nf-core/bcftools/reheader/meta.yml +++ b/modules/nf-core/bcftools/reheader/meta.yml @@ -27,6 +27,11 @@ input: type: file description: New header to add to the VCF pattern: "*.{header.txt}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Fasta index to update header sequences with @@ -50,3 +55,4 @@ output: authors: - "@bjohnnyd" - "@jemten" + - "@ramprasadn" diff --git a/modules/nf-core/bcftools/roh/main.nf b/modules/nf-core/bcftools/roh/main.nf index 46243411..d8a8bc79 100644 --- a/modules/nf-core/bcftools/roh/main.nf +++ b/modules/nf-core/bcftools/roh/main.nf @@ -5,7 +5,7 @@ process BCFTOOLS_ROH { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index 01a58823..86f807d3 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -5,7 +5,7 @@ process BCFTOOLS_VIEW { conda "bioconda::bcftools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bcftools:1.17--haef29d1_0': - 'quay.io/biocontainers/bcftools:1.17--haef29d1_0' }" + 'biocontainers/bcftools:1.17--haef29d1_0' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/bwa/index/main.nf b/modules/nf-core/bwa/index/main.nf index 7ccf3110..8d2e56d9 100644 --- a/modules/nf-core/bwa/index/main.nf +++ b/modules/nf-core/bwa/index/main.nf @@ -5,7 +5,7 @@ process BWA_INDEX { conda "bioconda::bwa=0.7.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bwa:0.7.17--hed695b0_7' : - 'quay.io/biocontainers/bwa:0.7.17--hed695b0_7' }" + 'biocontainers/bwa:0.7.17--hed695b0_7' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/bwamem2/index/main.nf b/modules/nf-core/bwamem2/index/main.nf index a236121b..30940852 100644 --- a/modules/nf-core/bwamem2/index/main.nf +++ b/modules/nf-core/bwamem2/index/main.nf @@ -5,7 +5,7 @@ process BWAMEM2_INDEX { conda "bioconda::bwa-mem2=2.2.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/bwa-mem2:2.2.1--he513fc3_0' : - 'quay.io/biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" + 'biocontainers/bwa-mem2:2.2.1--he513fc3_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf index 489b1704..d427dea3 100644 --- a/modules/nf-core/bwamem2/mem/main.nf +++ b/modules/nf-core/bwamem2/mem/main.nf @@ -5,7 +5,7 @@ process BWAMEM2_MEM { conda "bioconda::bwa-mem2=2.2.1 bioconda::samtools=1.16.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' : - 'quay.io/biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' }" + 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2cdf6bf1e92acbeb9b2834b1c58754167173a410-0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml index a4655510..bc3dfcdd 100644 --- a/modules/nf-core/bwamem2/mem/meta.yml +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -28,6 +28,11 @@ input: 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 diff --git a/modules/nf-core/cadd/main.nf b/modules/nf-core/cadd/main.nf index ce1e369d..0f644811 100644 --- a/modules/nf-core/cadd/main.nf +++ b/modules/nf-core/cadd/main.nf @@ -5,7 +5,7 @@ process CADD { conda "bioconda::cadd-scripts=1.6 anaconda::conda=4.14.0 conda-forge::mamba=1.4.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0': - 'quay.io/biocontainers/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0' }" + 'biocontainers/mulled-v2-8d145e7b16a8ca4bf920e6ca464763df6f0a56a2:d4e457a2edecb2b10e915c01d8f46e29e236b648-0' }" containerOptions { (workflow.containerEngine == 'singularity') ? diff --git a/modules/nf-core/cadd/meta.yml b/modules/nf-core/cadd/meta.yml index 0dd0fb26..b54f5951 100644 --- a/modules/nf-core/cadd/meta.yml +++ b/modules/nf-core/cadd/meta.yml @@ -3,6 +3,7 @@ description: CADD is a tool for scoring the deleteriousness of single nucleotide keywords: - cadd - annotate + - variants tools: - "cadd": description: "CADD scripts release for offline scoring" diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf index 840af4b9..9f062219 100644 --- a/modules/nf-core/cat/cat/main.nf +++ b/modules/nf-core/cat/cat/main.nf @@ -5,7 +5,7 @@ process CAT_CAT { conda "conda-forge::pigz=2.3.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pigz:2.3.4' : - 'quay.io/biocontainers/pigz:2.3.4' }" + 'biocontainers/pigz:2.3.4' }" input: tuple val(meta), path(files_in) diff --git a/modules/nf-core/custom/dumpsoftwareversions/main.nf b/modules/nf-core/custom/dumpsoftwareversions/main.nf index 800a6099..ebc87273 100644 --- a/modules/nf-core/custom/dumpsoftwareversions/main.nf +++ b/modules/nf-core/custom/dumpsoftwareversions/main.nf @@ -5,7 +5,7 @@ process CUSTOM_DUMPSOFTWAREVERSIONS { conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path versions diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index afc5e444..2cea90ab 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -1,8 +1,8 @@ process DEEPVARIANT { tag "$meta.id" - label 'process_medium' + label 'process_high' - container "docker.io/google/deepvariant:1.4.0" + container "docker.io/google/deepvariant:1.5.0" // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { @@ -11,14 +11,16 @@ process DEEPVARIANT { input: tuple val(meta), path(input), path(index), path(intervals) - path(fasta) - path(fai) - path(gzi) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(gzi) output: - tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf - tuple val(meta), path("${prefix}.g.vcf.gz"), emit: gvcf - path "versions.yml" , emit: versions + tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf + tuple val(meta), path("${prefix}.vcf.gz.tbi") , emit: vcf_tbi + tuple val(meta), path("${prefix}.g.vcf.gz") , emit: gvcf + tuple val(meta), path("${prefix}.g.vcf.gz.tbi"), emit: gvcf_tbi + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -26,7 +28,7 @@ process DEEPVARIANT { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def regions = intervals ? "--regions ${intervals}" : "" + def regions = intervals ? "--regions=${intervals}" : "" """ /opt/deepvariant/bin/run_deepvariant \\ @@ -36,6 +38,7 @@ process DEEPVARIANT { --output_gvcf=${prefix}.g.vcf.gz \\ ${args} \\ ${regions} \\ + --intermediate_results_dir=. \\ --num_shards=${task.cpus} cat <<-END_VERSIONS > versions.yml @@ -48,7 +51,9 @@ process DEEPVARIANT { prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi touch ${prefix}.g.vcf.gz + touch ${prefix}.g.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/deepvariant/meta.yml b/modules/nf-core/deepvariant/meta.yml index 97f068ec..c7d11ae3 100644 --- a/modules/nf-core/deepvariant/meta.yml +++ b/modules/nf-core/deepvariant/meta.yml @@ -31,14 +31,29 @@ input: type: file description: Interval file for targeted regions pattern: "*.bed" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: The reference fasta file pattern: "*.fasta" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Index of reference fasta file pattern: "*.fai" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - gzi: type: file description: GZI index of reference fasta file @@ -65,3 +80,4 @@ output: authors: - "@abhi18av" + - "@ramprasadn" diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 9ae58381..07d5e433 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -5,7 +5,7 @@ process FASTQC { conda "bioconda::fastqc=0.11.9" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/fastqc:0.11.9--0' : - 'quay.io/biocontainers/fastqc:0.11.9--0' }" + 'biocontainers/fastqc:0.11.9--0' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/gatk4/bedtointervallist/main.nf b/modules/nf-core/gatk4/bedtointervallist/main.nf index 41830019..a23abd06 100644 --- a/modules/nf-core/gatk4/bedtointervallist/main.nf +++ b/modules/nf-core/gatk4/bedtointervallist/main.nf @@ -5,11 +5,11 @@ process GATK4_BEDTOINTERVALLIST { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bed) - path dict + tuple val(meta2), path(dict) output: tuple val(meta), path('*.interval_list'), emit: interval_list diff --git a/modules/nf-core/gatk4/bedtointervallist/meta.yml b/modules/nf-core/gatk4/bedtointervallist/meta.yml index 986f1592..40daf752 100644 --- a/modules/nf-core/gatk4/bedtointervallist/meta.yml +++ b/modules/nf-core/gatk4/bedtointervallist/meta.yml @@ -3,6 +3,7 @@ description: Creates an interval list from a bed file and a reference dict keywords: - bed - interval list + - bedtointervallist tools: - gatk4: description: | @@ -23,6 +24,11 @@ input: type: file description: Input bed file pattern: "*.bed" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: Sequence dictionary @@ -38,3 +44,4 @@ output: pattern: "versions.yml" authors: - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index 1e78f017..41abb235 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -5,14 +5,14 @@ process GATK4_CREATESEQUENCEDICTIONARY { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: - path fasta + tuple val(meta), path(fasta) output: - path "*.dict" , emit: dict - path "versions.yml" , emit: versions + tuple val(meta), path('*.dict') , emit: dict + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when diff --git a/modules/nf-core/gatk4/createsequencedictionary/meta.yml b/modules/nf-core/gatk4/createsequencedictionary/meta.yml index 69c23581..a421e681 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/meta.yml +++ b/modules/nf-core/gatk4/createsequencedictionary/meta.yml @@ -3,6 +3,7 @@ description: Creates a sequence dictionary for a reference sequence keywords: - dictionary - fasta + - createsequencedictionary tools: - gatk: description: | @@ -15,6 +16,11 @@ tools: licence: ["Apache-2.0"] input: + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Input fasta file @@ -30,3 +36,4 @@ output: pattern: "versions.yml" authors: - "@maxulysse" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/filtermutectcalls/main.nf b/modules/nf-core/gatk4/filtermutectcalls/main.nf index 09643857..d0cf5b4a 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/main.nf +++ b/modules/nf-core/gatk4/filtermutectcalls/main.nf @@ -5,13 +5,13 @@ process GATK4_FILTERMUTECTCALLS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf), path(vcf_tbi), path(stats), path(orientationbias), path(segmentation), path(table), val(estimate) - path fasta - path fai - path dict + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) output: tuple val(meta), path("*.vcf.gz") , emit: vcf @@ -29,7 +29,7 @@ process GATK4_FILTERMUTECTCALLS { def orientationbias_command = orientationbias ? orientationbias.collect{"--orientation-bias-artifact-priors $it"}.join(' ') : '' def segmentation_command = segmentation ? segmentation.collect{"--tumor-segmentation $it"}.join(' ') : '' def estimate_command = estimate ? " --contamination-estimate ${estimate} " : '' - def table_command = table ? " --contamination-table ${table} " : '' + def table_command = table ? table.collect{"--contamination-table $it"}.join(' ') : '' def avail_mem = 3072 if (!task.memory) { diff --git a/modules/nf-core/gatk4/filtermutectcalls/meta.yml b/modules/nf-core/gatk4/filtermutectcalls/meta.yml index d1972d70..1a6faecb 100644 --- a/modules/nf-core/gatk4/filtermutectcalls/meta.yml +++ b/modules/nf-core/gatk4/filtermutectcalls/meta.yml @@ -35,28 +35,43 @@ input: description: Stats file that pairs with output vcf file pattern: "*vcf.gz.stats" - orientationbias: - type: list + type: file description: files containing artifact priors for input vcf. Optional input. pattern: "*.artifact-prior.tar.gz" - segmentation: - type: list + type: file description: tables containing segmentation information for input vcf. Optional input. pattern: "*.segmentation.table" - table: - type: list + type: file description: table(s) containing contamination data for input vcf. Optional input, takes priority over estimate. pattern: "*.contamination.table" - estimate: - type: val + type: float description: estimation of contamination value as a double. Optional input, will only be used if table is not specified. + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: The reference fasta file pattern: "*.fasta" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Index of reference fasta file pattern: "*.fasta.fai" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: GATK sequence dictionary @@ -83,3 +98,4 @@ output: authors: - "@GCJMackenzie" - "@maxulysse" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/intervallisttools/main.nf b/modules/nf-core/gatk4/intervallisttools/main.nf index e221dc01..0054659a 100644 --- a/modules/nf-core/gatk4/intervallisttools/main.nf +++ b/modules/nf-core/gatk4/intervallisttools/main.nf @@ -5,7 +5,7 @@ process GATK4_INTERVALLISTTOOLS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) diff --git a/modules/nf-core/gatk4/mergebamalignment/main.nf b/modules/nf-core/gatk4/mergebamalignment/main.nf index 9ee676ce..35d2e71e 100644 --- a/modules/nf-core/gatk4/mergebamalignment/main.nf +++ b/modules/nf-core/gatk4/mergebamalignment/main.nf @@ -5,12 +5,12 @@ process GATK4_MERGEBAMALIGNMENT { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(aligned), path(unmapped) - path fasta - path dict + tuple val(meta2), path(fasta) + tuple val(meta3), path(dict) output: tuple val(meta), path('*.bam'), emit: bam diff --git a/modules/nf-core/gatk4/mergebamalignment/meta.yml b/modules/nf-core/gatk4/mergebamalignment/meta.yml index b4bff490..9d8ae84b 100644 --- a/modules/nf-core/gatk4/mergebamalignment/meta.yml +++ b/modules/nf-core/gatk4/mergebamalignment/meta.yml @@ -1,8 +1,10 @@ name: gatk4_mergebamalignment description: Merge unmapped with mapped BAM files keywords: + - alignment - bam - merge + - mergebamalignment tools: - gatk4: description: | @@ -27,9 +29,19 @@ input: type: file description: The unmaped bam file pattern: "*.{bam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: The reference fasta file + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: GATK sequence dictionary @@ -44,3 +56,4 @@ output: pattern: "versions.yml" authors: - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/mergevcfs/main.nf b/modules/nf-core/gatk4/mergevcfs/main.nf index d0f48757..dfb5b33a 100644 --- a/modules/nf-core/gatk4/mergevcfs/main.nf +++ b/modules/nf-core/gatk4/mergevcfs/main.nf @@ -5,7 +5,7 @@ process GATK4_MERGEVCFS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/gatk4/mutect2/main.nf b/modules/nf-core/gatk4/mutect2/main.nf index 97e3408f..bddc3688 100644 --- a/modules/nf-core/gatk4/mutect2/main.nf +++ b/modules/nf-core/gatk4/mutect2/main.nf @@ -5,17 +5,17 @@ process GATK4_MUTECT2 { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(input_index), path(intervals) - path fasta - path fai - path dict - path germline_resource - path germline_resource_tbi - path panel_of_normals - path panel_of_normals_tbi + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) + path(germline_resource) + path(germline_resource_tbi) + path(panel_of_normals) + path(panel_of_normals_tbi) output: tuple val(meta), path("*.vcf.gz") , emit: vcf diff --git a/modules/nf-core/gatk4/mutect2/meta.yml b/modules/nf-core/gatk4/mutect2/meta.yml index aa0a02aa..4842c229 100644 --- a/modules/nf-core/gatk4/mutect2/meta.yml +++ b/modules/nf-core/gatk4/mutect2/meta.yml @@ -31,17 +31,32 @@ input: description: list of BAM file indexes, also able to take CRAM indexes as an input pattern: "*.{bam.bai/cram.crai}" - intervals: - type: File/string + type: file description: Specify region the tools is run on. - pattern: ".{bed,interval_list}/chrM" + pattern: ".{bed,interval_list}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: The reference fasta file pattern: "*.fasta" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Index of reference fasta file pattern: "*.fasta.fai" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: GATK sequence dictionary @@ -87,3 +102,4 @@ output: authors: - "@GCJMackenzie" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf index 13e722bd..0fd13048 100644 --- a/modules/nf-core/gatk4/printreads/main.nf +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -5,13 +5,13 @@ process GATK4_PRINTREADS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(index) tuple val(meta2), path(fasta) - path (fai) - path (dict) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) output: tuple val(meta), path("${prefix}.bam") , emit: bam, optional: true diff --git a/modules/nf-core/gatk4/printreads/meta.yml b/modules/nf-core/gatk4/printreads/meta.yml index cd48959f..8150c7a7 100644 --- a/modules/nf-core/gatk4/printreads/meta.yml +++ b/modules/nf-core/gatk4/printreads/meta.yml @@ -34,16 +34,26 @@ input: - meta2: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: reference fasta file pattern: "*.{fa,fasta}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: reference fasta index file pattern: "*.{fai}" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: reference fasta dictionary file diff --git a/modules/nf-core/gatk4/revertsam/main.nf b/modules/nf-core/gatk4/revertsam/main.nf index 5481ea49..768b1eed 100644 --- a/modules/nf-core/gatk4/revertsam/main.nf +++ b/modules/nf-core/gatk4/revertsam/main.nf @@ -5,7 +5,7 @@ process GATK4_REVERTSAM { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/gatk4/samtofastq/main.nf b/modules/nf-core/gatk4/samtofastq/main.nf index 585fc582..f838b95a 100644 --- a/modules/nf-core/gatk4/samtofastq/main.nf +++ b/modules/nf-core/gatk4/samtofastq/main.nf @@ -5,7 +5,7 @@ process GATK4_SAMTOFASTQ { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index 001b7f68..6c08c3b5 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -5,7 +5,7 @@ process GATK4_SELECTVARIANTS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf), path(vcf_idx), path (intervals) diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index a40abe45..df5d0be1 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -5,13 +5,13 @@ process GATK4_SPLITINTERVALS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) - path(fasta) - path(fasta_fai) - path(dict) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) output: tuple val(meta), path("**.interval_list"), emit: split_intervals diff --git a/modules/nf-core/gatk4/splitintervals/meta.yml b/modules/nf-core/gatk4/splitintervals/meta.yml index 701c6893..a249f077 100644 --- a/modules/nf-core/gatk4/splitintervals/meta.yml +++ b/modules/nf-core/gatk4/splitintervals/meta.yml @@ -3,6 +3,7 @@ description: Split intervals into sub-interval files. keywords: - interval - bed + - splitintervals tools: - gatk4: description: Genome Analysis Toolkit (GATK4) @@ -22,14 +23,29 @@ input: type: file description: Interval list or BED pattern: "*.{interval,interval_list,bed}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Reference FASTA pattern: "*.{fa,fasta}" - - fasta_fai: + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: type: file description: Reference FASTA index pattern: "*.fai" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: Reference sequence dictionary @@ -52,3 +68,4 @@ output: authors: - "@nvnieuwk" + - "@ramprasadn" diff --git a/modules/nf-core/gatk4/variantfiltration/main.nf b/modules/nf-core/gatk4/variantfiltration/main.nf index cc03ff3c..387ff8ca 100644 --- a/modules/nf-core/gatk4/variantfiltration/main.nf +++ b/modules/nf-core/gatk4/variantfiltration/main.nf @@ -5,13 +5,13 @@ process GATK4_VARIANTFILTRATION { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(vcf), path(tbi) - path fasta - path fai - path dict + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) output: tuple val(meta), path("*.vcf.gz"), emit: vcf diff --git a/modules/nf-core/gatk4/variantfiltration/meta.yml b/modules/nf-core/gatk4/variantfiltration/meta.yml index 04b1c086..2260f37b 100644 --- a/modules/nf-core/gatk4/variantfiltration/meta.yml +++ b/modules/nf-core/gatk4/variantfiltration/meta.yml @@ -3,6 +3,7 @@ description: Filter variants keywords: - vcf - filter + - variantfiltration tools: - gatk4: description: | @@ -27,14 +28,29 @@ input: type: list description: List of VCF file indexes pattern: "*.{idx,tbi}" + - 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 @@ -54,3 +70,4 @@ output: pattern: "versions.yml" authors: - "@kevinmenden" + - "@ramprasadn" diff --git a/modules/nf-core/genmod/annotate/main.nf b/modules/nf-core/genmod/annotate/main.nf index 9d9350dc..43ae0d19 100644 --- a/modules/nf-core/genmod/annotate/main.nf +++ b/modules/nf-core/genmod/annotate/main.nf @@ -5,7 +5,7 @@ process GENMOD_ANNOTATE { conda "bioconda::genmod=3.7.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/compound/main.nf b/modules/nf-core/genmod/compound/main.nf index 925f76bb..149a03d8 100644 --- a/modules/nf-core/genmod/compound/main.nf +++ b/modules/nf-core/genmod/compound/main.nf @@ -5,7 +5,7 @@ process GENMOD_COMPOUND { conda "bioconda::genmod=3.7.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/models/main.nf b/modules/nf-core/genmod/models/main.nf index cd1b747e..3f5700d6 100644 --- a/modules/nf-core/genmod/models/main.nf +++ b/modules/nf-core/genmod/models/main.nf @@ -5,7 +5,7 @@ process GENMOD_MODELS { conda "bioconda::genmod=3.7.4 conda-forge::python=3.4.5" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/genmod/score/main.nf b/modules/nf-core/genmod/score/main.nf index d3c9957c..d1efade5 100644 --- a/modules/nf-core/genmod/score/main.nf +++ b/modules/nf-core/genmod/score/main.nf @@ -5,7 +5,7 @@ process GENMOD_SCORE { conda "bioconda::genmod=3.7.4" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/genmod:3.7.4--pyh5e36f6f_0': - 'quay.io/biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" + 'biocontainers/genmod:3.7.4--pyh5e36f6f_0' }" input: tuple val(meta), path(input_vcf) diff --git a/modules/nf-core/glnexus/main.nf b/modules/nf-core/glnexus/main.nf index 479da5a7..2bd4580a 100644 --- a/modules/nf-core/glnexus/main.nf +++ b/modules/nf-core/glnexus/main.nf @@ -5,7 +5,7 @@ process GLNEXUS { conda "bioconda::glnexus=1.4.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/glnexus:1.4.1--h40d77a6_0' : - 'quay.io/biocontainers/glnexus:1.4.1--h40d77a6_0' }" + 'biocontainers/glnexus:1.4.1--h40d77a6_0' }" input: tuple val(meta), path(gvcfs) diff --git a/modules/nf-core/haplocheck/main.nf b/modules/nf-core/haplocheck/main.nf index 0a593bd0..464f5dbf 100644 --- a/modules/nf-core/haplocheck/main.nf +++ b/modules/nf-core/haplocheck/main.nf @@ -5,7 +5,7 @@ process HAPLOCHECK { conda "bioconda::haplocheck=1.3.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/haplocheck:1.3.3--h4a94de4_0': - 'quay.io/biocontainers/haplocheck:1.3.3--h4a94de4_0' }" + 'biocontainers/haplocheck:1.3.3--h4a94de4_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/haplogrep2/classify/main.nf b/modules/nf-core/haplogrep2/classify/main.nf index 8931ca78..7f775cae 100644 --- a/modules/nf-core/haplogrep2/classify/main.nf +++ b/modules/nf-core/haplogrep2/classify/main.nf @@ -5,7 +5,7 @@ process HAPLOGREP2_CLASSIFY { conda "bioconda::haplogrep=2.4.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/haplogrep:2.4.0--hdfd78af_0': - 'quay.io/biocontainers/haplogrep:2.4.0--hdfd78af_0' }" + 'biocontainers/haplogrep:2.4.0--hdfd78af_0' }" input: tuple val(meta), path(inputfile) diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index 2feb6ed2..8f785fe0 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -5,13 +5,13 @@ process MANTA_GERMLINE { conda "bioconda::manta=1.6.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/manta:1.6.0--h9ee0642_1' : - 'quay.io/biocontainers/manta:1.6.0--h9ee0642_1' }" + 'biocontainers/manta:1.6.0--h9ee0642_1' }" input: //Matching the target bed with the input sample allows to parallelize the same sample run across different intervals or a single bed file tuple val(meta), path(input), path(index), path(target_bed), path(target_bed_tbi) - path fasta - path fasta_fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*candidate_small_indels.vcf.gz") , emit: candidate_small_indels_vcf diff --git a/modules/nf-core/manta/germline/meta.yml b/modules/nf-core/manta/germline/meta.yml index b719f075..2eb16ada 100644 --- a/modules/nf-core/manta/germline/meta.yml +++ b/modules/nf-core/manta/germline/meta.yml @@ -39,11 +39,21 @@ input: type: file description: Index for BED file containing target regions for variant calling pattern: "*.{bed.tbi}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Genome reference FASTA file pattern: "*.{fa,fasta}" - - fasta_fai: + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: type: file description: Genome reference FASTA index file pattern: "*.{fa.fai,fasta.fai}" diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index 827c489e..c17e4e65 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -5,7 +5,7 @@ process MOSDEPTH { conda "bioconda::mosdepth=0.3.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.3--hdfd78af_1' : - 'quay.io/biocontainers/mosdepth:0.3.3--hdfd78af_1'}" + 'biocontainers/mosdepth:0.3.3--hdfd78af_1'}" input: tuple val(meta), path(bam), path(bai), path(bed) diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 4b604749..1fc387be 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -4,7 +4,7 @@ process MULTIQC { conda "bioconda::multiqc=1.14" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'biocontainers/multiqc:1.14--pyhdfd78af_0' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/peddy/main.nf b/modules/nf-core/peddy/main.nf index 5d1cfe2f..6671de73 100644 --- a/modules/nf-core/peddy/main.nf +++ b/modules/nf-core/peddy/main.nf @@ -5,7 +5,7 @@ process PEDDY { conda "bioconda::peddy=0.4.8" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/peddy:0.4.8--pyh5e36f6f_0' : - 'quay.io/biocontainers/peddy:0.4.8--pyh5e36f6f_0' }" + 'biocontainers/peddy:0.4.8--pyh5e36f6f_0' }" input: tuple val(meta), path(vcf), path(vcf_tbi) diff --git a/modules/nf-core/picard/addorreplacereadgroups/main.nf b/modules/nf-core/picard/addorreplacereadgroups/main.nf index c6b1be37..a2a8d1c3 100644 --- a/modules/nf-core/picard/addorreplacereadgroups/main.nf +++ b/modules/nf-core/picard/addorreplacereadgroups/main.nf @@ -5,7 +5,7 @@ process PICARD_ADDORREPLACEREADGROUPS { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index 5f1e9c90..d721bc6f 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -5,14 +5,13 @@ process PICARD_COLLECTHSMETRICS { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: - tuple val(meta), path(bam), path(bai) + tuple val(meta), path(bam), path(bai), path(bait_intervals), path(target_intervals) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) - path bait_intervals - path target_intervals + tuple val(meta4), path(dict) output: tuple val(meta), path("*_metrics") , emit: metrics @@ -32,14 +31,34 @@ process PICARD_COLLECTHSMETRICS { } else { avail_mem = (task.memory.mega*0.8).intValue() } + + def bait_interval_list = bait_intervals + def bait_intervallist_cmd = "" + if (bait_intervals =~ /.(bed|bed.gz)$/){ + bait_interval_list = bait_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") + bait_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${bait_intervals} --OUTPUT ${bait_interval_list} --SEQUENCE_DICTIONARY ${dict} --TMP_DIR ." + } + + def target_interval_list = target_intervals + def target_intervallist_cmd = "" + if (target_intervals =~ /.(bed|bed.gz)$/){ + target_interval_list = target_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") + target_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${target_intervals} --OUTPUT ${target_interval_list} --SEQUENCE_DICTIONARY ${dict} --TMP_DIR ." + } + + """ + + $bait_intervallist_cmd + $target_intervallist_cmd + picard \\ -Xmx${avail_mem}M \\ CollectHsMetrics \\ $args \\ $reference \\ - --BAIT_INTERVALS $bait_intervals \\ - --TARGET_INTERVALS $target_intervals \\ + --BAIT_INTERVALS $bait_interval_list \\ + --TARGET_INTERVALS $target_interval_list \\ --INPUT $bam \\ --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml index 7e045c05..fecad0e5 100644 --- a/modules/nf-core/picard/collecthsmetrics/meta.yml +++ b/modules/nf-core/picard/collecthsmetrics/meta.yml @@ -32,6 +32,14 @@ input: type: file description: Optional aligned BAM/CRAM/SAM file index pattern: "*.{bai,crai,sai}" + - bait_intervals: + type: file + description: An interval file that contains the locations of the baits used. + pattern: "*.{interval_list,bed,bed.gz}" + - target_intervals: + type: file + description: An interval file that contains the locations of the targets. + pattern: "*.{interval_list,bed,bed.gz}" - meta2: type: map description: | @@ -52,15 +60,15 @@ input: type: file description: Index of FASTA file. Only needed when fasta is supplied. pattern: "*.fai" - - bait_intervals: - type: file - description: An interval list file that contains the locations of the baits used. - pattern: "baits.interval_list" - - target_intervals: + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fai: type: file - description: An interval list file that contains the locations of the targets. - pattern: "targets.interval_list" - + description: Sequence dictionary of FASTA file. Only needed when bed interval lists are supplied. + pattern: "*.dict" output: - meta: type: map diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index ed88dbe7..91fe9170 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -5,7 +5,7 @@ process PICARD_COLLECTMULTIPLEMETRICS { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta) , path(bam), path(bai) diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index 5d2a39b8..1d59334c 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -5,12 +5,12 @@ process PICARD_COLLECTWGSMETRICS { conda "bioconda::picard=3.0.0 r::r-base" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) - tuple val(meta2), path(fai) + tuple val(meta3), path(fai) path intervallist output: diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index 2f8dbd3c..19906f08 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -37,7 +37,7 @@ input: type: file description: Genome fasta file pattern: "*.{fa,fasta,fna}" - - meta2: + - meta3: type: map description: | Groovy Map containing reference information @@ -67,3 +67,4 @@ authors: - "@drpatelh" - "@flowuenne" - "@lassefolkersen" + - "@ramprasadn" diff --git a/modules/nf-core/picard/liftovervcf/main.nf b/modules/nf-core/picard/liftovervcf/main.nf index 935fb544..bfb004f7 100644 --- a/modules/nf-core/picard/liftovervcf/main.nf +++ b/modules/nf-core/picard/liftovervcf/main.nf @@ -5,13 +5,13 @@ process PICARD_LIFTOVERVCF { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(input_vcf) - path dict - path chain - path fasta + tuple val(meta2), path(dict) + tuple val(meta3), path(fasta) + tuple val(meta4), path(chain) output: tuple val(meta), path("*.lifted.vcf.gz") , emit: vcf_lifted diff --git a/modules/nf-core/picard/liftovervcf/meta.yml b/modules/nf-core/picard/liftovervcf/meta.yml index be42aba4..6023e5f9 100644 --- a/modules/nf-core/picard/liftovervcf/meta.yml +++ b/modules/nf-core/picard/liftovervcf/meta.yml @@ -1,8 +1,9 @@ name: picard_liftovervcf -description: convert between genome builds +description: Lifts over a VCF file from one reference build to another. keywords: - - liftOver + - vcf - picard + - liftovervcf tools: - picard: description: Move annotations from one assembly to another @@ -21,17 +22,32 @@ input: type: file description: VCF file pattern: "*.{vcf,vcf.gz}" - - chain: - type: file - description: The liftover chain file + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: fasta file pattern: "*.fasta" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - dict: type: file description: dictionary for fasta file pattern: "*.{dict}" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - chain: + type: file + description: The liftover chain file output: - meta: @@ -53,3 +69,4 @@ output: authors: - "@lucpen" + - "@ramprasadn" diff --git a/modules/nf-core/picard/markduplicates/main.nf b/modules/nf-core/picard/markduplicates/main.nf index 1fe6ee2d..facd7efb 100644 --- a/modules/nf-core/picard/markduplicates/main.nf +++ b/modules/nf-core/picard/markduplicates/main.nf @@ -5,12 +5,12 @@ process PICARD_MARKDUPLICATES { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(bam) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*.bam") , emit: bam diff --git a/modules/nf-core/picard/markduplicates/meta.yml b/modules/nf-core/picard/markduplicates/meta.yml index 3f2357bb..f7693d2f 100644 --- a/modules/nf-core/picard/markduplicates/meta.yml +++ b/modules/nf-core/picard/markduplicates/meta.yml @@ -25,10 +25,20 @@ input: type: file description: BAM file pattern: "*.{bam,cram,sam}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: Reference genome fasta file pattern: "*.{fasta,fa}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fai: type: file description: Reference genome fasta index @@ -58,3 +68,4 @@ output: authors: - "@drpatelh" - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/picard/renamesampleinvcf/main.nf b/modules/nf-core/picard/renamesampleinvcf/main.nf index 646a953d..75dd64b7 100644 --- a/modules/nf-core/picard/renamesampleinvcf/main.nf +++ b/modules/nf-core/picard/renamesampleinvcf/main.nf @@ -6,7 +6,7 @@ process PICARD_RENAMESAMPLEINVCF { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/picard/sortvcf/main.nf b/modules/nf-core/picard/sortvcf/main.nf index 0269b0f4..b8b1f833 100644 --- a/modules/nf-core/picard/sortvcf/main.nf +++ b/modules/nf-core/picard/sortvcf/main.nf @@ -5,12 +5,12 @@ process PICARD_SORTVCF { conda "bioconda::picard=3.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/picard:3.0.0--hdfd78af_1' : - 'quay.io/biocontainers/picard:3.0.0--hdfd78af_1' }" + 'biocontainers/picard:3.0.0--hdfd78af_1' }" input: tuple val(meta), path(vcf) - path reference - path sequence_dict + tuple val(meta2), path(fasta) + tuple val(meta3), path(dict) output: tuple val(meta), path("*_sorted.vcf.gz"), emit: vcf @@ -22,8 +22,8 @@ process PICARD_SORTVCF { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def seq_dict = sequence_dict ? "--SEQUENCE_DICTIONARY $sequence_dict" : "" - def reference = reference ? "--REFERENCE_SEQUENCE $reference" : "" + def seq_dict = dict ? "--SEQUENCE_DICTIONARY $dict" : "" + def reference = fasta ? "--REFERENCE_SEQUENCE $fasta" : "" def avail_mem = 3072 if (!task.memory) { log.info '[Picard SortVcf] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' diff --git a/modules/nf-core/picard/sortvcf/meta.yml b/modules/nf-core/picard/sortvcf/meta.yml index f75d3401..0a19784d 100644 --- a/modules/nf-core/picard/sortvcf/meta.yml +++ b/modules/nf-core/picard/sortvcf/meta.yml @@ -3,6 +3,7 @@ description: Sorts vcf files keywords: - sort - vcf + - sortvcf tools: - picard: description: Java tools for working with NGS data in the BAM/CRAM/SAM and VCF format @@ -20,6 +21,24 @@ input: type: file description: VCF file pattern: "*.{vcf,vcf.gz}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - fasta: + type: file + description: Reference genome fasta file + pattern: "*.{fasta,fa}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] + - dict: + type: file + description: Reference genome dictionary file + pattern: "*.{dict}" output: - meta: diff --git a/modules/nf-core/qualimap/bamqc/main.nf b/modules/nf-core/qualimap/bamqc/main.nf index be505f56..fef7307a 100644 --- a/modules/nf-core/qualimap/bamqc/main.nf +++ b/modules/nf-core/qualimap/bamqc/main.nf @@ -5,7 +5,7 @@ process QUALIMAP_BAMQC { conda "bioconda::qualimap=2.2.2d" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/qualimap:2.2.2d--1' : - 'quay.io/biocontainers/qualimap:2.2.2d--1' }" + 'biocontainers/qualimap:2.2.2d--1' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/rhocall/annotate/main.nf b/modules/nf-core/rhocall/annotate/main.nf index 155a9d69..ba55feac 100644 --- a/modules/nf-core/rhocall/annotate/main.nf +++ b/modules/nf-core/rhocall/annotate/main.nf @@ -5,7 +5,7 @@ process RHOCALL_ANNOTATE { conda "bioconda::rhocall=0.5.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/rhocall:0.5.1--py39hbf8eff0_0': - 'quay.io/biocontainers/rhocall:0.5.1--py39hbf8eff0_0' }" + 'biocontainers/rhocall:0.5.1--py39hbf8eff0_0' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 21be8bad..4dd0e5b0 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -5,7 +5,7 @@ process SAMTOOLS_FAIDX { conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index 19d25cae..0b20aa4b 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -5,7 +5,7 @@ process SAMTOOLS_INDEX { conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index ebd64221..b73b7cb2 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -5,12 +5,12 @@ process SAMTOOLS_MERGE { conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input_files, stageAs: "?/*") - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 644b768b..3a815f74 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -25,13 +25,23 @@ input: 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: optional file - description: Reference file the CRAM was created with + 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: optional file - description: Index of the reference file the CRAM was created with + type: file + description: Index of the reference file the CRAM was created with (optional) pattern: "*.fai" output: - meta: @@ -60,3 +70,4 @@ authors: - "@yuukiiwa " - "@maxulysse" - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 933ebbe9..1e5181d4 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -5,7 +5,7 @@ process SAMTOOLS_SORT { conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(bam) diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 8dbcc53b..4a2607de 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -5,11 +5,11 @@ process SAMTOOLS_STATS { conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : - 'quay.io/biocontainers/samtools:1.17--h00cdaf9_0' }" + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input), path(input_index) - path fasta + tuple val(meta2), path(fasta) output: tuple val(meta), path("*.stats"), emit: stats diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 1d68a5d8..90e6345f 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -30,9 +30,14 @@ input: 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: optional file - description: Reference file the CRAM was created with + type: file + description: Reference file the CRAM was created with (optional) pattern: "*.{fasta,fa}" output: - meta: @@ -51,3 +56,4 @@ output: authors: - "@drpatelh" - "@FriederikeHanssen" + - "@ramprasadn" diff --git a/modules/nf-core/smncopynumbercaller/main.nf b/modules/nf-core/smncopynumbercaller/main.nf index e746f9fc..15abea2c 100644 --- a/modules/nf-core/smncopynumbercaller/main.nf +++ b/modules/nf-core/smncopynumbercaller/main.nf @@ -5,7 +5,7 @@ process SMNCOPYNUMBERCALLER { conda "bioconda::smncopynumbercaller=1.1.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/smncopynumbercaller:1.1.2--py310h7cba7a3_0' : - 'quay.io/biocontainers/smncopynumbercaller:1.1.2--py310h7cba7a3_0' }" + 'biocontainers/smncopynumbercaller:1.1.2--py310h7cba7a3_0' }" input: tuple val(meta), path(bam), path(bai) diff --git a/modules/nf-core/stranger/main.nf b/modules/nf-core/stranger/main.nf index 582e389e..04f9bccc 100644 --- a/modules/nf-core/stranger/main.nf +++ b/modules/nf-core/stranger/main.nf @@ -5,7 +5,7 @@ process STRANGER { conda "bioconda::stranger=0.8.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/stranger:0.8.1--pyh5e36f6f_0': - 'quay.io/biocontainers/stranger:0.8.1--pyh5e36f6f_0' }" + 'biocontainers/stranger:0.8.1--pyh5e36f6f_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/svdb/merge/main.nf b/modules/nf-core/svdb/merge/main.nf index 8544daff..0bd94499 100644 --- a/modules/nf-core/svdb/merge/main.nf +++ b/modules/nf-core/svdb/merge/main.nf @@ -4,7 +4,7 @@ process SVDB_MERGE { conda "bioconda::svdb=2.8.1 bioconda::samtools=1.16.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0': - 'quay.io/biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0' }" + 'biocontainers/mulled-v2-c8daa8f9d69d3c5a1a4ff08283a166c18edb0000:af6f8534cd538a85ff43a2eae1b52b143e7abd05-0' }" input: tuple val(meta), path(vcfs) diff --git a/modules/nf-core/svdb/merge/meta.yml b/modules/nf-core/svdb/merge/meta.yml index c71279e8..92a5a128 100644 --- a/modules/nf-core/svdb/merge/meta.yml +++ b/modules/nf-core/svdb/merge/meta.yml @@ -2,6 +2,8 @@ name: svdb_merge description: The merge module merges structural variants within one or more vcf files. keywords: - structural variants + - vcf + - merge tools: - svdb: description: structural variant database software diff --git a/modules/nf-core/svdb/query/main.nf b/modules/nf-core/svdb/query/main.nf index f5e7da0f..5dbd42ec 100644 --- a/modules/nf-core/svdb/query/main.nf +++ b/modules/nf-core/svdb/query/main.nf @@ -5,7 +5,7 @@ process SVDB_QUERY { conda "bioconda::svdb=2.8.1" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/svdb:2.8.1--py39h5371cbf_0': - 'quay.io/biocontainers/svdb:2.8.1--py39h5371cbf_0' }" + 'biocontainers/svdb:2.8.1--py39h5371cbf_0' }" input: tuple val(meta), path(vcf) diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index 120aa114..fef528fc 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -11,7 +11,8 @@ process TABIX_BGZIPTABIX { tuple val(meta), path(input) output: - tuple val(meta), path("*.gz"), path("*.tbi"), emit: gz_tbi + tuple val(meta), path("*.gz"), path("*.tbi"), optional: true, emit: gz_tbi + tuple val(meta), path("*.gz"), path("*.csi"), optional: true, emit: gz_csi path "versions.yml" , emit: versions when: @@ -36,6 +37,7 @@ process TABIX_BGZIPTABIX { """ touch ${prefix}.${input.getExtension()}.gz touch ${prefix}.${input.getExtension()}.gz.tbi + touch ${prefix}.${input.getExtension()}.gz.csi cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/tabix/bgziptabix/meta.yml b/modules/nf-core/tabix/bgziptabix/meta.yml index 49c03289..2761e271 100644 --- a/modules/nf-core/tabix/bgziptabix/meta.yml +++ b/modules/nf-core/tabix/bgziptabix/meta.yml @@ -37,9 +37,14 @@ output: type: file description: tabix index file pattern: "*.{gz.tbi}" + - csi: + type: file + description: tabix alternate index file + pattern: "*.{gz.csi}" - versions: type: file description: File containing software versions pattern: "versions.yml" authors: - "@maxulysse" + - "@DLBPointon" diff --git a/modules/nf-core/tabix/tabix/main.nf b/modules/nf-core/tabix/tabix/main.nf index 9a404db9..5bf332ef 100644 --- a/modules/nf-core/tabix/tabix/main.nf +++ b/modules/nf-core/tabix/tabix/main.nf @@ -5,7 +5,7 @@ process TABIX_TABIX { conda "bioconda::tabix=1.11" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'quay.io/biocontainers/tabix:1.11--hdfd78af_0' }" + 'biocontainers/tabix:1.11--hdfd78af_0' }" input: tuple val(meta), path(tab) diff --git a/modules/nf-core/tiddit/cov/main.nf b/modules/nf-core/tiddit/cov/main.nf index dec79332..647f35a2 100644 --- a/modules/nf-core/tiddit/cov/main.nf +++ b/modules/nf-core/tiddit/cov/main.nf @@ -5,11 +5,11 @@ process TIDDIT_COV { conda "bioconda::tiddit=3.3.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tiddit:3.3.2--py310hc2b7f4b_0' : - 'quay.io/biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" + 'biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" input: tuple val(meta), path(input) - path fasta + tuple val(meta2), path(fasta) output: tuple val(meta), path("*.bed"), optional: true, emit: cov diff --git a/modules/nf-core/tiddit/cov/meta.yml b/modules/nf-core/tiddit/cov/meta.yml index 98ea27c2..10171166 100644 --- a/modules/nf-core/tiddit/cov/meta.yml +++ b/modules/nf-core/tiddit/cov/meta.yml @@ -23,6 +23,11 @@ input: type: file description: BAM/CRAM file pattern: "*.{bam,cram}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'genome' ] - fasta: type: file description: | @@ -50,3 +55,4 @@ output: pattern: "versions.yml" authors: - "@projectoriented" + - "@ramprasadn" diff --git a/modules/nf-core/tiddit/sv/main.nf b/modules/nf-core/tiddit/sv/main.nf index 27b6450a..1ebc8565 100644 --- a/modules/nf-core/tiddit/sv/main.nf +++ b/modules/nf-core/tiddit/sv/main.nf @@ -5,7 +5,7 @@ process TIDDIT_SV { conda "bioconda::tiddit=3.3.2" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tiddit:3.3.2--py310hc2b7f4b_0' : - 'quay.io/biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" + 'biocontainers/tiddit:3.3.2--py310hc2b7f4b_0' }" input: tuple val(meta), path(input), path(input_index) diff --git a/modules/nf-core/ucsc/wigtobigwig/main.nf b/modules/nf-core/ucsc/wigtobigwig/main.nf index 7626159e..493cf578 100644 --- a/modules/nf-core/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/ucsc/wigtobigwig/main.nf @@ -6,7 +6,7 @@ process UCSC_WIGTOBIGWIG { conda "bioconda::ucsc-wigtobigwig=377" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ucsc-wigtobigwig:377--h0b8a92a_2' : - 'quay.io/biocontainers/ucsc-wigtobigwig:377--h0b8a92a_2' }" + 'biocontainers/ucsc-wigtobigwig:377--h0b8a92a_2' }" input: tuple val(meta), path(wig) diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf index 67f497ee..8cd1856c 100644 --- a/modules/nf-core/untar/main.nf +++ b/modules/nf-core/untar/main.nf @@ -5,7 +5,7 @@ process UNTAR { conda "conda-forge::sed=4.7 bioconda::grep=3.4 conda-forge::tar=1.34" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/ubuntu:20.04' : - 'docker.io/ubuntu:20.04' }" + 'nf-core/ubuntu:20.04' }" input: tuple val(meta), path(archive) diff --git a/modules/nf-core/vcfanno/main.nf b/modules/nf-core/vcfanno/main.nf index 86a11992..a2a078da 100644 --- a/modules/nf-core/vcfanno/main.nf +++ b/modules/nf-core/vcfanno/main.nf @@ -5,7 +5,7 @@ process VCFANNO { conda "bioconda::vcfanno=0.3.3" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/vcfanno:0.3.3--h9ee0642_0': - 'quay.io/biocontainers/vcfanno:0.3.3--h9ee0642_0' }" + 'biocontainers/vcfanno:0.3.3--h9ee0642_0' }" input: tuple val(meta), path(vcf), path(tbi), path(specific_resources) From 2f8d270c6569df9ae177fc7caddc75438206b0aa Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Tue, 23 May 2023 15:52:49 +0200 Subject: [PATCH 046/136] feat added MT deletion script --- conf/modules/align_and_call_MT.config | 4 ++ modules/local/mt_deletion_scritp.nf | 43 +++++++++++++++++++ subworkflows/local/analyse_MT.nf | 1 + .../local/mitochondria/align_and_call_MT.nf | 9 ++++ 4 files changed, 57 insertions(+) create mode 100644 modules/local/mt_deletion_scritp.nf diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config index c4915c11..716648ec 100644 --- a/conf/modules/align_and_call_MT.config +++ b/conf/modules/align_and_call_MT.config @@ -55,6 +55,10 @@ process { ext.prefix = { "${meta.id}_sorted" } } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_STATS_MT' { + ext.args = '-s --insert-size 16000' + } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } diff --git a/modules/local/mt_deletion_scritp.nf b/modules/local/mt_deletion_scritp.nf new file mode 100644 index 00000000..e6495014 --- /dev/null +++ b/modules/local/mt_deletion_scritp.nf @@ -0,0 +1,43 @@ +process MT_DELETION { + tag "$meta.id" + label 'process_single' + + conda "bioconda::samtools=1.16.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : + 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + + input: + tuple val(meta), path(stats) + + output: + path '*.txt' , emit: mt_del_script + path "versions.yml", emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + grep -E ^IS $stats | awk 'BEGIN {sum=0} (\$2>=1200 && \$2<=15000) {sum=sum+\$3} (\$2<1200 || \$2>15000) {sum_norm=sum_norm+\$3} END \\ + {print "intermediate discordant ", sum, "normal ", sum_norm, "ratio ppk", sum*1000/(sum_norm+sum)}' 1> ${prefix}_mt_del.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mt_del: v1.0 + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}_mt_del.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mt_del: v1.0 + END_VERSIONS + """ +} diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 0ad82f1a..3dc4b429 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -101,6 +101,7 @@ workflow ANALYSE_MT { tbi = MERGE_ANNOTATE_MT.out.tbi // channel: [ val(meta), path(tbi) ] stats = ALIGN_AND_CALL_MT.out.stats // channel: [ val(meta), path(stats) ] filt_stats = ALIGN_AND_CALL_MT.out.filt_stats // channel: [ val(meta), path(tsv) ] + mt_del_script = ALIGN_AND_CALL_MT.out.mt_del_script // channel: [ val(meta), path(txt) ] stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats // channel: [ val(meta), path(stats) ] filt_stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.filt_stats // channel: [ val(meta), path(tsv) ] haplog = MERGE_ANNOTATE_MT.out.haplog // channel: [ val(meta), path(txt) ] diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 7feb58bb..1e023e54 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -13,6 +13,8 @@ include { HAPLOCHECK as HAPLOCHECK_MT } fr include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../../modules/nf-core/gatk4/mutect2/main' include { GATK4_FILTERMUTECTCALLS as GATK4_FILTERMUTECTCALLS_MT } from '../../../modules/nf-core/gatk4/filtermutectcalls/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' +include { SAMTOOLS_STATS as SAMTOOLS_STATS_MT } from '../../../modules/nf-core/samtools/stats/main' +include { MT_DELETION } from '../../../modules/local/mt_deletion_scritp' workflow ALIGN_AND_CALL_MT { take: @@ -47,6 +49,10 @@ workflow ALIGN_AND_CALL_MT { ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, failOnMismatch:true, failOnDuplicate:true) ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(ch_intervals_mt) + SAMTOOLS_STATS_MT(ch_sort_index_bam, ch_fasta) + + MT_DELETION(SAMTOOLS_STATS_MT.out.stats) + GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) HAPLOCHECK_MT (GATK4_MUTECT2_MT.out.vcf) @@ -67,6 +73,8 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) + ch_versions = ch_versions.mix(SAMTOOLS_STATS_MT.out.versions.first()) + ch_versions = ch_versions.mix(MT_DELETION.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) @@ -78,5 +86,6 @@ workflow ALIGN_AND_CALL_MT { filt_stats = GATK4_FILTERMUTECTCALLS_MT.out.stats // channel: [ val(meta), path(tsv) ] txt = HAPLOCHECK_MT.out.txt // channel: [ val(meta), path(txt) ] html = HAPLOCHECK_MT.out.html // channel: [ val(meta), path(html) ] + mt_del_script = MT_DELETION.out.mt_del_script // channel: [ val(meta), path(txt) ] versions = ch_versions // channel: [ path(versions.yml) ] } From 5c1d423a0d92af093cf385219dc83393e7e7248f Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Tue, 23 May 2023 16:11:11 +0200 Subject: [PATCH 047/136] fix spacing --- conf/modules/align_and_call_MT.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config index 716648ec..352314e5 100644 --- a/conf/modules/align_and_call_MT.config +++ b/conf/modules/align_and_call_MT.config @@ -56,7 +56,7 @@ process { } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_STATS_MT' { - ext.args = '-s --insert-size 16000' + ext.args = '-s --insert-size 16000' } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { From b72320194062e4410c4e36cb3f67520341e64170 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 24 May 2023 02:53:56 +0200 Subject: [PATCH 048/136] update pipeline --- modules.json | 6 +- modules/local/ensemblvep/main.nf | 2 +- modules/local/sentieon/bqsr.nf | 18 +- modules/local/sentieon/bwamem.nf | 10 +- modules/local/sentieon/bwamemindex.nf | 2 +- modules/local/sentieon/datametrics.nf | 8 +- modules/local/sentieon/dedup.nf | 8 +- modules/local/sentieon/dnamodelapply.nf | 4 +- modules/local/sentieon/dnascope.nf | 18 +- modules/local/sentieon/locuscollector.nf | 2 +- modules/local/sentieon/readwriter.nf | 2 +- modules/local/sentieon/tnscope.nf | 4 +- modules/local/sentieon/wgsmetricsalgo.nf | 2 +- modules/nf-core/expansionhunter/meta.yml | 15 ++ modules/nf-core/samtools/view/main.nf | 2 +- modules/nf-core/samtools/view/meta.yml | 13 +- modules/nf-core/stranger/main.nf | 2 +- modules/nf-core/stranger/meta.yml | 5 + subworkflows/local/align.nf | 4 +- subworkflows/local/alignment/align_bwamem2.nf | 6 +- .../local/alignment/align_sentieon.nf | 4 +- subworkflows/local/analyse_MT.nf | 23 ++- subworkflows/local/annotate_snvs.nf | 4 +- .../local/annotate_structural_variants.nf | 6 +- .../local/annotation/annotate_cadd.nf | 4 +- subworkflows/local/call_repeat_expansions.nf | 12 +- subworkflows/local/call_snv.nf | 4 +- .../local/call_structural_variants.nf | 21 ++- .../local/mitochondria/align_and_call_MT.nf | 6 +- .../mitochondria/convert_mt_bam_to_fastq.nf | 4 +- .../local/mitochondria/merge_annotate_MT.nf | 14 +- subworkflows/local/prepare_references.nf | 66 ++++--- subworkflows/local/qc_bam.nf | 9 +- subworkflows/local/scatter_genome.nf | 11 +- .../variant_calling/call_snv_deepvariant.nf | 6 +- workflows/raredisease.nf | 168 ++++++++---------- 36 files changed, 249 insertions(+), 246 deletions(-) diff --git a/modules.json b/modules.json index 71faa97f..6b0ebcbc 100644 --- a/modules.json +++ b/modules.json @@ -82,7 +82,7 @@ }, "expansionhunter": { "branch": "master", - "git_sha": "5e4835b5798eaef33d23d9a2939f2ca9d3a07d4d", + "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", "installed_by": ["modules"] }, "fastqc": { @@ -287,7 +287,7 @@ }, "samtools/view": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", "installed_by": ["modules"] }, "smncopynumbercaller": { @@ -297,7 +297,7 @@ }, "stranger": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", "installed_by": ["modules"] }, "svdb/merge": { diff --git a/modules/local/ensemblvep/main.nf b/modules/local/ensemblvep/main.nf index 11ef4651..81d4191f 100644 --- a/modules/local/ensemblvep/main.nf +++ b/modules/local/ensemblvep/main.nf @@ -11,11 +11,11 @@ process ENSEMBLVEP { input: tuple val(meta), path(vcf) + tuple val(meta2), path(fasta) val genome val species val cache_version path cache - path fasta path extra_files output: diff --git a/modules/local/sentieon/bqsr.nf b/modules/local/sentieon/bqsr.nf index dc659871..390108e1 100644 --- a/modules/local/sentieon/bqsr.nf +++ b/modules/local/sentieon/bqsr.nf @@ -7,10 +7,10 @@ process SENTIEON_BQSR { input: tuple val(meta), path(bam), path(bai) - path fasta - path fai - tuple val(meta2), path(known_dbsnp) - tuple val(meta3), path(known_dbsnp_tbi) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(known_dbsnp) + tuple val(meta5), path(known_dbsnp_tbi) output: tuple val(meta), path('*.bam') , emit: bam @@ -24,12 +24,12 @@ process SENTIEON_BQSR { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def args3 = task.ext.args3 ?: '' - def input = bam.sort().collect{"-i $it"}.join(' ') - def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def args3 = task.ext.args3 ?: '' + def dbsnp = known_dbsnp ? "-k $known_dbsnp" : '' def prefix = task.ext.prefix ?: "${meta.id}" + def input = bam.sort().collect{"-i $it"}.join(' ') """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index c6d95089..f772d829 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -7,9 +7,9 @@ process SENTIEON_BWAMEM { input: tuple val(meta), path(reads) - path fasta - path fai - tuple val(meta2), path(index) // meta2 has same purpose as meta, and holds information about the genome/index + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(index) // meta2 has same purpose as meta, and holds information about the genome/index output: tuple val(meta), path('*.bam'), emit: bam @@ -20,8 +20,8 @@ process SENTIEON_BWAMEM { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" """ INDEX=`find -L ./ -name "*.amb" | sed 's/.amb//'` diff --git a/modules/local/sentieon/bwamemindex.nf b/modules/local/sentieon/bwamemindex.nf index 09d3eb1a..4b030975 100644 --- a/modules/local/sentieon/bwamemindex.nf +++ b/modules/local/sentieon/bwamemindex.nf @@ -16,7 +16,7 @@ process SENTIEON_BWAINDEX { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "bwa/${task.ext.prefix}" : "bwa/${fasta.baseName}" """ mkdir bwa diff --git a/modules/local/sentieon/datametrics.nf b/modules/local/sentieon/datametrics.nf index 498338f1..37ca6312 100644 --- a/modules/local/sentieon/datametrics.nf +++ b/modules/local/sentieon/datametrics.nf @@ -7,8 +7,8 @@ process SENTIEON_DATAMETRICS { input: tuple val(meta), path(bam), path(bai) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path('*mq_metrics.txt') , emit: mq_metrics @@ -23,9 +23,9 @@ process SENTIEON_DATAMETRICS { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def input = bam.sort().collect{"-i $it"}.join(' ') - def prefix = task.ext.prefix ?: "${meta.id}" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" diff --git a/modules/local/sentieon/dedup.nf b/modules/local/sentieon/dedup.nf index 6730e7b5..bb738985 100644 --- a/modules/local/sentieon/dedup.nf +++ b/modules/local/sentieon/dedup.nf @@ -7,8 +7,8 @@ process SENTIEON_DEDUP { input: tuple val(meta), path(bam), path(bai), path(score), path(score_idx) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path('*.bam') , emit: bam @@ -20,9 +20,9 @@ process SENTIEON_DEDUP { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def input = bam.sort().collect{"-i $it"}.join(' ') + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def input = bam.sort().collect{"-i $it"}.join(' ') """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then echo "Initializing SENTIEON_LICENSE env variable" diff --git a/modules/local/sentieon/dnamodelapply.nf b/modules/local/sentieon/dnamodelapply.nf index d2aaebff..32582b2c 100644 --- a/modules/local/sentieon/dnamodelapply.nf +++ b/modules/local/sentieon/dnamodelapply.nf @@ -5,8 +5,8 @@ process SENTIEON_DNAMODELAPPLY { input: tuple val(meta), path(vcf), path(vcf_idx) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) path ml_model output: diff --git a/modules/local/sentieon/dnascope.nf b/modules/local/sentieon/dnascope.nf index f9896c76..d03fe2d4 100644 --- a/modules/local/sentieon/dnascope.nf +++ b/modules/local/sentieon/dnascope.nf @@ -5,10 +5,10 @@ process SENTIEON_DNASCOPE { input: tuple val(meta), path(bam), path(bai) - path fasta - path fai - tuple val(meta2), path(known_dbsnp) - tuple val(meta3), path(known_dbsnp_tbi) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(known_dbsnp) + tuple val(meta5), path(known_dbsnp_tbi) path call_interval path ml_model @@ -22,11 +22,11 @@ process SENTIEON_DNASCOPE { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - def interval = call_interval ? "--interval ${call_interval}" : '' - def dbsnp = known_dbsnp ? "-d ${known_dbsnp}" : '' - def model = ml_model ? "--model ${ml_model}" : '' + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' + def interval = call_interval ? "--interval ${call_interval}" : '' + def dbsnp = known_dbsnp ? "-d ${known_dbsnp}" : '' + def model = ml_model ? "--model ${ml_model}" : '' def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/local/sentieon/locuscollector.nf b/modules/local/sentieon/locuscollector.nf index fa54756d..9335b0ec 100644 --- a/modules/local/sentieon/locuscollector.nf +++ b/modules/local/sentieon/locuscollector.nf @@ -17,7 +17,7 @@ process SENTIEON_LOCUSCOLLECTOR { task.ext.when == null || task.ext.when script: - def input = bam.sort().collect{"-i $it"}.join(' ') + def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ? "${task.ext.prefix}.txt.gz" : "${meta.id}.txt.gz" """ if [ \${SENTIEON_LICENSE_BASE64:-"unset"} != "unset" ]; then diff --git a/modules/local/sentieon/readwriter.nf b/modules/local/sentieon/readwriter.nf index 5490dd75..cc90fd25 100644 --- a/modules/local/sentieon/readwriter.nf +++ b/modules/local/sentieon/readwriter.nf @@ -18,7 +18,7 @@ process SENTIEON_READWRITER { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def input = bam.sort().collect{"-i $it"}.join(' ') def prefix = task.ext.prefix ?: "${meta.id}" """ diff --git a/modules/local/sentieon/tnscope.nf b/modules/local/sentieon/tnscope.nf index 7cfc1c06..c4857dc6 100644 --- a/modules/local/sentieon/tnscope.nf +++ b/modules/local/sentieon/tnscope.nf @@ -5,8 +5,8 @@ process SENTIEON_TNSCOPE { input: tuple val(meta), path(bam), path(bai) - path fasta - path fai + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: tuple val(meta), path("*vcf.gz") , emit: vcf diff --git a/modules/local/sentieon/wgsmetricsalgo.nf b/modules/local/sentieon/wgsmetricsalgo.nf index 12348b1f..3663947d 100644 --- a/modules/local/sentieon/wgsmetricsalgo.nf +++ b/modules/local/sentieon/wgsmetricsalgo.nf @@ -8,7 +8,7 @@ process SENTIEON_WGSMETRICSALGO { input: tuple val(meta), path(bam), path(bai) tuple val(meta2), path(fasta) - tuple val(meta2), path(fai) + tuple val(meta3), path(fai) path intervals_list output: diff --git a/modules/nf-core/expansionhunter/meta.yml b/modules/nf-core/expansionhunter/meta.yml index 645f751b..0d2b10d6 100644 --- a/modules/nf-core/expansionhunter/meta.yml +++ b/modules/nf-core/expansionhunter/meta.yml @@ -25,14 +25,29 @@ input: type: file description: BAM/CRAM file pattern: "*.{bam,cram}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: Reference genome pattern: "*.{fna,fa,fasta}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: Reference genome index pattern: "*.fai" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - variant_catalog: type: file description: JSON file with repeat expansion sites to genotype diff --git a/modules/nf-core/samtools/view/main.nf b/modules/nf-core/samtools/view/main.nf index b87369e5..cb91facf 100644 --- a/modules/nf-core/samtools/view/main.nf +++ b/modules/nf-core/samtools/view/main.nf @@ -9,7 +9,7 @@ process SAMTOOLS_VIEW { input: tuple val(meta), path(input), path(index) - path fasta + tuple val(meta2), path(fasta) path qname output: diff --git a/modules/nf-core/samtools/view/meta.yml b/modules/nf-core/samtools/view/meta.yml index 76916033..3b05450b 100644 --- a/modules/nf-core/samtools/view/meta.yml +++ b/modules/nf-core/samtools/view/meta.yml @@ -26,12 +26,17 @@ input: description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" - index: - type: optional file - description: BAM.BAI/BAM.CSI/CRAM.CRAI file + type: file + description: BAM.BAI/BAM.CSI/CRAM.CRAI file (optional) pattern: "*.{.bai,.csi,.crai}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: - type: optional file - description: Reference file the CRAM was created with + type: file + description: Reference file the CRAM was created with (optional) pattern: "*.{fasta,fa}" - qname: type: file diff --git a/modules/nf-core/stranger/main.nf b/modules/nf-core/stranger/main.nf index 04f9bccc..0c8a3412 100644 --- a/modules/nf-core/stranger/main.nf +++ b/modules/nf-core/stranger/main.nf @@ -9,7 +9,7 @@ process STRANGER { input: tuple val(meta), path(vcf) - path variant_catalog + tuple val(meta2), path(variant_catalog) output: tuple val(meta), path("*.gz"), emit: vcf diff --git a/modules/nf-core/stranger/meta.yml b/modules/nf-core/stranger/meta.yml index 0707d806..eefad398 100644 --- a/modules/nf-core/stranger/meta.yml +++ b/modules/nf-core/stranger/meta.yml @@ -24,6 +24,11 @@ input: type: file description: VCF with repeat expansions pattern: "*.{vcf.gz,vcf}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - variant_catalog: type: file description: json file with repeat expansion sites to genotype diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 208f4cd0..3af1f6e4 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -9,8 +9,8 @@ include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' workflow ALIGN { take: ch_reads_input // channel: [mandatory] [ val(meta), [path(reads)] ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_index_bwa // channel: [mandatory] [ val(meta), path(index) ] ch_index_bwamem2 // channel: [mandatory] [ val(meta), path(index) ] ch_known_dbsnp // channel: [optional; used by sentieon] [ path(known_dbsnp) ] diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 3857c8e0..3771d293 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -14,8 +14,8 @@ workflow ALIGN_BWAMEM2 { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] val_platform // string: [mandatory] default: illumina main: @@ -28,7 +28,7 @@ workflow ALIGN_BWAMEM2 { // Get stats for each demultiplexed read pair. bam_sorted_indexed = BWAMEM2_MEM.out.bam.join(SAMTOOLS_INDEX_ALIGN.out.bai, failOnMismatch:true, failOnDuplicate:true) - SAMTOOLS_STATS ( bam_sorted_indexed, [] ) + SAMTOOLS_STATS ( bam_sorted_indexed, [[],[]] ) // Merge multiple lane samples and index BWAMEM2_MEM.out.bam diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index a161cb1d..2878bdec 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -12,8 +12,8 @@ include { SENTIEON_READWRITER } from '../../../modules/local/sentieon/readwr workflow ALIGN_SENTIEON { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] ch_known_dbsnp // channel: [optional] [ path(known_dbsnp) ] ch_known_dbsnp_tbi // channel: [optional] [ path(known_dbsnp_tbi) ] diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index c46b82c9..60db58ec 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -14,11 +14,9 @@ workflow ANALYSE_MT { ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_bwa_index // channel: [mandatory] [ path(index) ] ch_genome_bwamem2_index // channel: [mandatory] [ path(index) ] - ch_genome_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fasta_no_meta // channel: [mandatory] [ path(fasta) ] - ch_genome_dict_meta // channel: [mandatory] [ val(meta), path(dict) ] - ch_genome_dict_no_meta // channel: [mandatory] [ path(dict) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_genome_fai // channel: [mandatory] [ path(fai) ] + ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] ch_mt_intervals // channel: [mandatory] [ path(interval_list) ] ch_shift_mt_bwa_index // channel: [mandatory] [ path(index) ] ch_shift_mt_bwamem2_index // channel: [mandatory] [ path(index) ] @@ -40,9 +38,9 @@ workflow ANALYSE_MT { // PREPARING READS FOR MT ALIGNMENT CONVERT_MT_BAM_TO_FASTQ ( ch_bam, - ch_genome_fasta_meta, + ch_genome_fasta, ch_genome_fai, - ch_genome_dict_no_meta + ch_genome_dict ) // MT ALIGNMENT AND VARIANT CALLING @@ -51,8 +49,8 @@ workflow ANALYSE_MT { CONVERT_MT_BAM_TO_FASTQ.out.bam, ch_genome_bwa_index, ch_genome_bwamem2_index, - ch_genome_fasta_no_meta, - ch_genome_dict_no_meta, + ch_genome_fasta, + ch_genome_dict, ch_genome_fai, ch_mt_intervals ) @@ -71,9 +69,9 @@ workflow ANALYSE_MT { // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT PICARD_LIFTOVERVCF ( ALIGN_AND_CALL_MT_SHIFT.out.vcf, - ch_genome_dict_no_meta, + ch_genome_dict, ch_shift_mt_backchain, - ch_genome_fasta_no_meta + ch_genome_fasta ) // MT MERGE AND ANNOTATE VARIANTS @@ -82,9 +80,8 @@ workflow ANALYSE_MT { PICARD_LIFTOVERVCF.out.vcf_lifted, ch_cadd_header, ch_cadd_resources, - ch_genome_fasta_no_meta, - ch_genome_dict_meta, - ch_genome_dict_no_meta, + ch_genome_fasta, + ch_genome_dict, ch_genome_fai, ch_vcfanno_resources, ch_vcfanno_toml, diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index f31a1119..479723c9 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -29,7 +29,7 @@ workflow ANNOTATE_SNVS { val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_gnomad_af // channel: [optional] [ path(tab), path(tbi) ] ch_split_intervals // channel: [mandatory] [ path(intervals) ] ch_samples // channel: [mandatory] [ val(sample_id), val(sex), val(phenotype), val(paternal_id), val(maternal_id), val(case_id) ] @@ -109,11 +109,11 @@ workflow ANNOTATE_SNVS { // Annotating with ensembl Vep ENSEMBLVEP_SNV( ch_vep_in, + ch_fasta, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, - ch_fasta, [] ) diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index 6af0519f..a43b28fe 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -16,8 +16,8 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_seq_dict // channel: [mandatory] [ path(dict) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_seq_dict // channel: [mandatory] [ val(meta), path(dict) ] main: ch_versions = Channel.empty() @@ -50,11 +50,11 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ENSEMBLVEP_SV( BCFTOOLS_VIEW.out.vcf, + ch_fasta, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, - ch_fasta, [] ) diff --git a/subworkflows/local/annotation/annotate_cadd.nf b/subworkflows/local/annotation/annotate_cadd.nf index 9e49c01f..e471dd21 100644 --- a/subworkflows/local/annotation/annotate_cadd.nf +++ b/subworkflows/local/annotation/annotate_cadd.nf @@ -32,10 +32,10 @@ workflow ANNOTATE_CADD { .join(ch_index) .join(CADD.out.tsv) .join(TABIX_CADD.out.tbi) - .groupTuple() + .combine(ch_header) .set { ch_annotate_in } - BCFTOOLS_ANNOTATE(ch_annotate_in, ch_header) + BCFTOOLS_ANNOTATE(ch_annotate_in) TABIX_ANNOTATE (BCFTOOLS_ANNOTATE.out.vcf) diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 52343806..858792c6 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -18,19 +18,17 @@ workflow CALL_REPEAT_EXPANSIONS { ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] ch_variant_catalog // channel: [mandatory] [ path(variant_catalog.json) ] ch_case_info // channel: [mandatory] [ val(case_id) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] - ch_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai_meta // channel: [mandatory] [ val(meta), path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] main: ch_versions = Channel.empty() EXPANSIONHUNTER ( ch_bam, - ch_fasta_meta, - ch_fai_meta, - ch_variant_catalog.map { it -> [[id:it[0].simpleName],it]} + ch_fasta, + ch_fai, + ch_variant_catalog ) // Fix header and rename sample diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index c8493a49..0f6ea2ca 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -10,8 +10,8 @@ include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariant workflow CALL_SNV { take: ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_known_dbsnp // channel: [optional] [ val(meta), path(vcf) ] ch_known_dbsnp_tbi // channel: [optional] [ val(meta), path(tbi) ] ch_call_interval // channel: [mandatory] [ path(intervals) ] diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index e5708a65..5154a61f 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -10,25 +10,24 @@ include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/main' workflow CALL_STRUCTURAL_VARIANTS { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam) ] - ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] - ch_fasta_no_meta // channel: [mandatory] [ path(fasta) ] - ch_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] main: ch_versions = Channel.empty() - CALL_SV_MANTA (ch_bam, ch_bai, ch_fasta_no_meta, ch_fai, ch_case_info, ch_target_bed) + CALL_SV_MANTA (ch_bam, ch_bai, ch_fasta, ch_fai, ch_case_info, ch_target_bed) .diploid_sv_vcf .collect{it[1]} .set{ manta_vcf } - CALL_SV_TIDDIT (ch_bam_bai, ch_fasta_meta, ch_bwa_index, ch_case_info) + CALL_SV_TIDDIT (ch_bam_bai, ch_fasta, ch_bwa_index, ch_case_info) .vcf .collect{it[1]} .set { tiddit_vcf } diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 7feb58bb..3d992322 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -20,9 +20,9 @@ workflow ALIGN_AND_CALL_MT { ch_ubam // channel: [mandatory] [ val(meta), path(bam) ] ch_index_bwa // channel: [mandatory for sentieon] [ val(meta), path(index) ] ch_index_bwamem2 // channel: [mandatory for bwamem2] [ val(meta), path(index) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_dict // channel: [mandatory] [ path(dict) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_intervals_mt // channel: [mandatory] [ path(interval_list) ] main: diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index adbee07b..2df4406f 100644 --- a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -10,8 +10,8 @@ workflow CONVERT_MT_BAM_TO_FASTQ { take: ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] ch_genome_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ path(fai) ] - ch_genome_dict // channel: [mandatory] [ path(dict) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] main: ch_versions = Channel.empty() diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index b1427858..8d4f3da0 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -24,8 +24,7 @@ workflow MERGE_ANNOTATE_MT { ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] ch_genome_fasta // channel: [mandatory] [ path(fasta) ] - ch_genome_dict_meta // channel: [mandatory] [ val(meta), path(dict) ] - ch_genome_dict_no_meta // channel: [mandatory] [ path(dict) ] + ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] ch_genome_fai // channel: [mandatory] [ path(fai) ] ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] @@ -42,13 +41,13 @@ workflow MERGE_ANNOTATE_MT { .map{ meta, vcf1, vcf2 -> [meta, [vcf1, vcf2]] } - GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, ch_genome_dict_meta) + GATK4_MERGEVCFS_LIFT_UNLIFT_MT( ch_vcfs, ch_genome_dict) // Filtering Variants GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.vcf .join(GATK4_MERGEVCFS_LIFT_UNLIFT_MT.out.tbi, failOnMismatch:true, failOnDuplicate:true) .set { ch_filt_vcf } - GATK4_VARIANTFILTRATION_MT (ch_filt_vcf, ch_genome_fasta, ch_genome_fai, ch_genome_dict_no_meta) + GATK4_VARIANTFILTRATION_MT (ch_filt_vcf, ch_genome_fasta, ch_genome_fai, ch_genome_dict) // Spliting multiallelic calls GATK4_VARIANTFILTRATION_MT.out.vcf @@ -90,9 +89,10 @@ workflow MERGE_ANNOTATE_MT { }.set { ch_case_vcf } BCFTOOLS_MERGE_MT( ch_case_vcf.multiple, - [], ch_genome_fasta, - ch_genome_fai) + ch_genome_fai, + [] + ) BCFTOOLS_MERGE_MT.out.merged_variants .mix(ch_case_vcf.single) @@ -123,11 +123,11 @@ workflow MERGE_ANNOTATE_MT { // Annotating with ensembl Vep ENSEMBLVEP_MT( ch_vep_in, + ch_genome_fasta, val_vep_genome, "homo_sapiens", val_vep_cache_version, ch_vep_cache, - ch_genome_fasta, [] ) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 0eb68049..0138cbaa 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -23,14 +23,12 @@ include { UNTAR as UNTAR_VEP_CACHE } from '../../modul workflow PREPARE_REFERENCES { take: - ch_fasta_no_meta // channel: [mandatory] [ path(fasta) ] - ch_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_mt_fasta_shift_no_meta // channel: [mandatory for dedicated mt analysis] [ path(fasta) ] - ch_mt_fasta_shift_meta // channel: [mandatory for dedicated mt analysis] [ val(meta), path(fasta) ] - ch_gnomad_af_tab // channel: [optional; used in for snv annotation] [ val(meta), path(tab) ] - ch_known_dbsnp // channel: [optional; used only by sentieon] [ val(meta), path(vcf) ] - ch_target_bed // channel: [mandatory for WES] [ path(bed) ] - ch_vep_cache // channel: [mandatory for annotation] [ path(cache) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fasta_mt // channel: [mandatory for dedicated mt analysis] [ val(meta), path(fasta) ] + ch_gnomad_af_tab // channel: [optional; used in for snv annotation] [ val(meta), path(tab) ] + ch_known_dbsnp // channel: [optional; used only by sentieon] [ val(meta), path(vcf) ] + ch_target_bed // channel: [mandatory for WES] [ path(bed) ] + ch_vep_cache // channel: [mandatory for annotation] [ path(cache) ] main: ch_versions = Channel.empty() @@ -40,15 +38,15 @@ workflow PREPARE_REFERENCES { ch_sentieonbwa = Channel.empty() // Genome indices - BWA_INDEX_GENOME(ch_fasta_meta).index.set{ch_bwa} - BWAMEM2_INDEX_GENOME(ch_fasta_meta) - BWAMEM2_INDEX_SHIFT_MT(ch_mt_fasta_shift_meta) - SENTIEON_BWAINDEX_GENOME(ch_fasta_meta).index.set{ch_sentieonbwa} - SENTIEON_BWAINDEX_SHIFT_MT(ch_mt_fasta_shift_meta) - SAMTOOLS_FAIDX_GENOME(ch_fasta_meta) - SAMTOOLS_FAIDX_SHIFT_MT(ch_mt_fasta_shift_meta) - GATK_SD(ch_fasta_no_meta) - GATK_SD_SHIFT_MT(ch_mt_fasta_shift_no_meta) + BWA_INDEX_GENOME(ch_fasta).index.set{ch_bwa} + BWAMEM2_INDEX_GENOME(ch_fasta) + BWAMEM2_INDEX_SHIFT_MT(ch_fasta_mt) + SENTIEON_BWAINDEX_GENOME(ch_fasta).index.set{ch_sentieonbwa} + SENTIEON_BWAINDEX_SHIFT_MT(ch_fasta_mt) + SAMTOOLS_FAIDX_GENOME(ch_fasta) + SAMTOOLS_FAIDX_SHIFT_MT(ch_fasta_mt) + GATK_SD(ch_fasta) + GATK_SD_SHIFT_MT(ch_fasta_mt) GET_CHROM_SIZES( SAMTOOLS_FAIDX_GENOME.out.fai ) // Vcf, tab and bed indices @@ -90,24 +88,22 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(UNTAR_VEP_CACHE.out.versions) emit: - bait_intervals = CAT_CAT_BAIT.out.file_out.map { id, it -> [it] }.collect() // channel: [ path(intervals) ] - bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] - bwa_index_mt_shift = SENTIEON_BWAINDEX_SHIFT_MT.out.index.collect() // channel: [ val(meta), path(index) ] - bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] - bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() // channel: [ val(meta), path(index) ] - chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] - fasta_fai = SAMTOOLS_FAIDX_GENOME.out.fai.map{ meta, fai -> [fai] }.collect() // channel: [ path(fai) ] - fasta_fai_meta = SAMTOOLS_FAIDX_GENOME.out.fai.collect() // channel: [ val(meta), path(fai) ] - fasta_fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.map{ meta, fai -> [fai] }.collect() // channel: [ path(fai) ] - gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] - known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] - sequence_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] - sequence_dict_meta = GATK_SD.out.dict.map {it -> [[id:it[0].simpleName], it]}.collect() // channel: [ val(meta), path(fasta) ] - sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() // channel: [ path(dict) ] - target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() // channel: [ val(meta), path(bed), path(tbi) ] - target_intervals = GATK_BILT.out.interval_list.collect{it[1]}.collect() // channel: [ path(interval_list) ] - vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}.collect() // channel: [ path(cache) ] - versions = ch_versions // channel: [ path(versions.yml) ] + bait_intervals = CAT_CAT_BAIT.out.file_out.map{ meta, inter -> inter}.collect() // channel: [ path(intervals) ] + bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] + bwa_index_mt_shift = SENTIEON_BWAINDEX_SHIFT_MT.out.index.collect() // channel: [ val(meta), path(index) ] + bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] + bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() // channel: [ val(meta), path(index) ] + chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] + fai = SAMTOOLS_FAIDX_GENOME.out.fai.collect() // channel: [ val(meta), path(fai) ] + fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.collect() // channel: [ val(meta), path(fai) ] + gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] + known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] + sequence_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] + sequence_dict_mt_shift = GATK_SD_SHIFT_MT.out.dict.collect() // channel: [ path(dict) ] + target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() // channel: [ val(meta), path(bed), path(tbi) ] + target_intervals = GATK_BILT.out.interval_list.map{ meta, inter -> inter}.collect() // channel: [ path(interval_list) ] + vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}.collect() // channel: [ path(cache) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 5e3f046b..27561988 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -32,11 +32,16 @@ workflow QC_BAM { PICARD_COLLECTMULTIPLEMETRICS (ch_bam_bai, ch_fasta, ch_fai) - PICARD_COLLECTHSMETRICS (ch_bam_bai, ch_fasta, ch_fai, ch_bait_intervals, ch_target_intervals) + ch_bam_bai + .combine(ch_bait_intervals) + .combine(ch_target_intervals) + .set { ch_hsmetrics_in} + + PICARD_COLLECTHSMETRICS (ch_hsmetrics_in, ch_fasta, ch_fai, [[],[]]) QUALIMAP_BAMQC (ch_bam, []) - TIDDIT_COV (ch_bam, []) // 2nd pos. arg is req. only for cram input + TIDDIT_COV (ch_bam, [[],[]]) // 2nd pos. arg is req. only for cram input UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, ch_chrom_sizes) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 6f5dac41..6e759880 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -8,17 +8,16 @@ include { GATK4_SPLITINTERVALS } from '../../modules/nf-core/gatk4/splitinterval workflow SCATTER_GENOME { take: - ch_dict // channel: [mandatory] [ path(dict) ] - ch_fai_meta // channel: [mandatory] [ val(meta), path(fai) ] - ch_fai_no_meta // channel: [mandatory] [ path(fai) ] - ch_fasta_no_meta // channel: [mandatory] [ path(fasta) ] + ch_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] main: ch_versions = Channel.empty() - BUILD_BED (ch_fai_meta) + BUILD_BED (ch_fai) - GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_fasta_no_meta, ch_fai_no_meta, ch_dict) + GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_fasta, ch_fai, ch_dict) ch_versions = ch_versions.mix(BUILD_BED.out.versions) ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index fa240b1e..ba9ded64 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -11,8 +11,8 @@ include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-co workflow CALL_SNV_DEEPVARIANT { take: ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_case_info // channel: [mandatory] [ val(case_info) ] main: @@ -23,7 +23,7 @@ workflow CALL_SNV_DEEPVARIANT { } .set { ch_deepvar_in } - DEEPVARIANT ( ch_deepvar_in, ch_fasta, ch_fai, [] ) + DEEPVARIANT ( ch_deepvar_in, ch_fasta, ch_fai, [[],[]] ) DEEPVARIANT.out.gvcf .collect{it[1]} .toList() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index d100d1d7..8555e1f4 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -182,56 +182,52 @@ workflow RAREDISEASE { ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) // Initialize all file channels including unprocessed vcf, bed and tab files - ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() - ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() - : Channel.value([]) - ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() - : Channel.value([]) - ch_genome_fasta_no_meta = params.fasta ? Channel.fromPath(params.fasta).collect() - : ( error('Genome fasta not specified!') ) - ch_genome_fasta_meta = ch_genome_fasta_no_meta.map { it -> [[id:it[0].simpleName], it] } - ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([[],[]]) - ch_intervals_wgs = params.intervals_wgs ? Channel.fromPath(params.intervals_wgs).collect() - : Channel.empty() - ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() - : Channel.empty() - ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([[],[]]) - ch_ml_model = (params.variant_caller.equals("sentieon") && params.ml_model) ? Channel.fromPath(params.ml_model).collect() - : Channel.value([]) - ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift).collect() - : Channel.value([]) - ch_mt_fasta_shift_no_meta = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift).collect() - : Channel.empty() - ch_mt_fasta_shift_meta = params.mt_fasta_shift ? ch_mt_fasta_shift_no_meta.map { it -> [[id:it[0].simpleName], it] }.collect() - : Channel.empty() - ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals).collect() - : Channel.value([]) - ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() - : Channel.value([]) - ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() - : Channel.value([]) - ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() - : Channel.value([]) - ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() - : Channel.value([]) - ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([[],[]]) - ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog).collect() - : Channel.value([]) - ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true).collect() - - ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() - : Channel.value([]) - ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(params.vcfanno_lua).collect() - : Channel.value([]) - ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(params.vcfanno_toml).collect() - : Channel.value([]) - ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache).map { it -> [[id:'vep_cache'], it] }.collect() - : Channel.value([[],[]]) - ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters).collect() - : Channel.value([]) + ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() + ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() + ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true).collect() + + ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() + : Channel.value([]) + ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() + : Channel.value([]) + ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_intervals_wgs = params.intervals_wgs ? Channel.fromPath(params.intervals_wgs).collect() + : Channel.empty() + ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() + : Channel.empty() + ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).collect() + : Channel.value([]) + ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([]) + ch_mt_fasta_shift = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift).map { it -> [[id:it[0].simpleName], it] }.collect() + : Channel.empty() + ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals).collect() + : Channel.value([]) + ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() + : Channel.value([]) + ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() + : Channel.value([]) + ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() + : Channel.value([]) + ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() + : Channel.value([]) + ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog).map { it -> [[id:it[0].simpleName],it]}.collect() + : Channel.value([[],[]]) + ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() + : Channel.value([]) + ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(params.vcfanno_lua).collect() + : Channel.value([]) + ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(params.vcfanno_toml).collect() + : Channel.value([]) + ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache).map { it -> [[id:'vep_cache'], it] }.collect() + : Channel.value([[],[]]) + ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters).collect() + : Channel.value([]) // Generate pedigree file pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } @@ -242,10 +238,8 @@ workflow RAREDISEASE { // Prepare references and indices. PREPARE_REFERENCES ( - ch_genome_fasta_no_meta, - ch_genome_fasta_meta, - ch_mt_fasta_shift_no_meta, - ch_mt_fasta_shift_meta, + ch_genome_fasta, + ch_mt_fasta_shift, ch_gnomad_af_tab, ch_known_dbsnp, ch_target_bed_unprocessed, @@ -261,39 +255,34 @@ workflow RAREDISEASE { : ch_references.bwa_index_mt_shift ch_bwamem2_index = params.bwamem2 ? Channel.fromPath(params.bwamem2).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.bwamem2_index - ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).collect() + ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.bwamem2_index_mt_shift ch_chrom_sizes = ch_references.chrom_sizes - ch_genome_fai_no_meta = params.fai ? Channel.fromPath(params.fai).collect() - : ch_references.fasta_fai - ch_genome_fai_meta = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.fasta_fai_meta - ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).collect() - : ch_references.fasta_fai_mt_shift + ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.fai + ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.fai_mt_shift ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() : ch_references.gnomad_af_idx ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_gnomad_af_idx).map {meta, tab, idx -> [tab,idx]}.collect() : Channel.empty() ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.known_dbsnp_tbi.ifEmpty([[],[]]) - ch_sequence_dictionary_no_meta = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).collect() + ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.sequence_dict - ch_sequence_dictionary_meta = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.sequence_dict_meta - ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).collect() + ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.sequence_dict_mt_shift ch_target_bed = ch_references.target_bed ch_target_intervals = ch_references.target_intervals ch_vep_cache = ( params.vep_cache && params.vep_cache.endsWith("tar.gz") ) ? ch_references.vep_resources - : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) + : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) ch_versions = ch_versions.mix(ch_references.versions) // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( - ch_sequence_dictionary_no_meta, - ch_genome_fai_meta, - ch_genome_fai_no_meta, - ch_genome_fasta_no_meta + ch_sequence_dictionary, + ch_genome_fai, + ch_genome_fasta ) .set { ch_scatter } @@ -302,8 +291,8 @@ workflow RAREDISEASE { // ALIGNING READS, FETCH STATS, AND MERGE. ALIGN ( CHECK_INPUT.out.reads, - ch_genome_fasta_no_meta, - ch_genome_fai_no_meta, + ch_genome_fasta, + ch_genome_fai, ch_bwa_index, ch_bwamem2_index, ch_known_dbsnp, @@ -318,8 +307,8 @@ workflow RAREDISEASE { ch_mapped.marked_bam, ch_mapped.marked_bai, ch_mapped.bam_bai, - ch_genome_fasta_meta, - ch_genome_fai_meta, + ch_genome_fasta, + ch_genome_fai, ch_bait_intervals, ch_target_intervals, ch_chrom_sizes, @@ -333,10 +322,8 @@ workflow RAREDISEASE { ch_mapped.bam_bai, ch_variant_catalog, CHECK_INPUT.out.case_info, - ch_genome_fasta_no_meta, - ch_genome_fai_no_meta, - ch_genome_fasta_meta, - ch_genome_fai_meta + ch_genome_fasta, + ch_genome_fai ) ch_versions = ch_versions.mix(CALL_REPEAT_EXPANSIONS.out.versions) @@ -364,8 +351,8 @@ workflow RAREDISEASE { // STEP 2: VARIANT CALLING CALL_SNV ( ch_mapped.bam_bai, - ch_genome_fasta_no_meta, - ch_genome_fai_no_meta, + ch_genome_fasta, + ch_genome_fai, ch_known_dbsnp, ch_known_dbsnp_tbi, ch_call_interval, @@ -379,9 +366,8 @@ workflow RAREDISEASE { ch_mapped.marked_bai, ch_mapped.bam_bai, ch_bwa_index, - ch_genome_fasta_no_meta, - ch_genome_fasta_meta, - ch_genome_fai_no_meta, + ch_genome_fasta, + ch_genome_fai, CHECK_INPUT.out.case_info, ch_target_bed ) @@ -417,8 +403,8 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - ch_genome_fasta_no_meta, - ch_sequence_dictionary_no_meta + ch_genome_fasta, + ch_sequence_dictionary ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) @@ -451,15 +437,13 @@ workflow RAREDISEASE { ch_cadd_resources, ch_bwa_index, ch_bwamem2_index, - ch_genome_fasta_meta, - ch_genome_fasta_no_meta, - ch_sequence_dictionary_meta, - ch_sequence_dictionary_no_meta, - ch_genome_fai_no_meta, + ch_genome_fasta, + ch_genome_fai, + ch_sequence_dictionary, ch_mt_intervals, ch_bwa_index_mt_shift, ch_bwamem2_index_mt_shift, - ch_mt_fasta_shift_no_meta, + ch_mt_fasta_shift, ch_sequence_dictionary_mt_shift, ch_mt_shift_fai, ch_mt_intervals_shift, @@ -504,7 +488,7 @@ workflow RAREDISEASE { params.genome, params.vep_cache_version, ch_vep_cache, - ch_genome_fasta_no_meta, + ch_genome_fasta, ch_gnomad_af, ch_scatter_split_intervals, CHECK_INPUT.out.samples From 98d233af08b7899f84a0ed80f5875045a05fbb4d Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Wed, 24 May 2023 13:17:43 +0200 Subject: [PATCH 049/136] fix PR comments --- modules/local/mt_deletion_scritp.nf | 2 +- subworkflows/local/analyse_MT.nf | 2 +- .../local/mitochondria/align_and_call_MT.nf | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/local/mt_deletion_scritp.nf b/modules/local/mt_deletion_scritp.nf index e6495014..32f20abf 100644 --- a/modules/local/mt_deletion_scritp.nf +++ b/modules/local/mt_deletion_scritp.nf @@ -22,7 +22,7 @@ process MT_DELETION { """ grep -E ^IS $stats | awk 'BEGIN {sum=0} (\$2>=1200 && \$2<=15000) {sum=sum+\$3} (\$2<1200 || \$2>15000) {sum_norm=sum_norm+\$3} END \\ - {print "intermediate discordant ", sum, "normal ", sum_norm, "ratio ppk", sum*1000/(sum_norm+sum)}' 1> ${prefix}_mt_del.txt + {print "intermediate discordant ", sum, "normal ", sum_norm, "ratio ppk", sum*1000/(sum_norm+sum)}' 1> ${prefix}.txt cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 7dc465ec..40eeb5cc 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -102,7 +102,7 @@ workflow ANALYSE_MT { tbi = MERGE_ANNOTATE_MT.out.tbi // channel: [ val(meta), path(tbi) ] stats = ALIGN_AND_CALL_MT.out.stats // channel: [ val(meta), path(stats) ] filt_stats = ALIGN_AND_CALL_MT.out.filt_stats // channel: [ val(meta), path(tsv) ] - mt_del_script = ALIGN_AND_CALL_MT.out.mt_del_script // channel: [ val(meta), path(txt) ] + mt_del_result = ALIGN_AND_CALL_MT.out.mt_del_result // channel: [ val(meta), path(txt) ] stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats // channel: [ val(meta), path(stats) ] filt_stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.filt_stats // channel: [ val(meta), path(tsv) ] haplog = MERGE_ANNOTATE_MT.out.haplog // channel: [ val(meta), path(txt) ] diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index d72d2e4d..e80e3d3d 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -80,12 +80,12 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) emit: - vcf = GATK4_FILTERMUTECTCALLS_MT.out.vcf // channel: [ val(meta), path(vcf) ] - tbi = GATK4_FILTERMUTECTCALLS_MT.out.tbi // channel: [ val(meta), path(tbi) ] - stats = GATK4_MUTECT2_MT.out.stats // channel: [ val(meta), path(stats) ] - filt_stats = GATK4_FILTERMUTECTCALLS_MT.out.stats // channel: [ val(meta), path(tsv) ] - txt = HAPLOCHECK_MT.out.txt // channel: [ val(meta), path(txt) ] - html = HAPLOCHECK_MT.out.html // channel: [ val(meta), path(html) ] - mt_del_script = MT_DELETION.out.mt_del_script // channel: [ val(meta), path(txt) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = GATK4_FILTERMUTECTCALLS_MT.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = GATK4_FILTERMUTECTCALLS_MT.out.tbi // channel: [ val(meta), path(tbi) ] + stats = GATK4_MUTECT2_MT.out.stats // channel: [ val(meta), path(stats) ] + filt_stats = GATK4_FILTERMUTECTCALLS_MT.out.stats // channel: [ val(meta), path(tsv) ] + txt = HAPLOCHECK_MT.out.txt // channel: [ val(meta), path(txt) ] + html = HAPLOCHECK_MT.out.html // channel: [ val(meta), path(html) ] + mt_del_result = MT_DELETION.out.mt_del_script // channel: [ val(meta), path(txt) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 0cd1233318e8cbccfecffdb31e8686f1fcaa9bc6 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Wed, 24 May 2023 13:19:36 +0200 Subject: [PATCH 050/136] fix PR comments --- modules/local/mt_deletion_scritp.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/mt_deletion_scritp.nf b/modules/local/mt_deletion_scritp.nf index 32f20abf..ac1a1a1f 100644 --- a/modules/local/mt_deletion_scritp.nf +++ b/modules/local/mt_deletion_scritp.nf @@ -11,8 +11,8 @@ process MT_DELETION { tuple val(meta), path(stats) output: - path '*.txt' , emit: mt_del_script - path "versions.yml", emit: versions + tuple val(meta), path('*.txt'), emit: mt_del_script + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when From 11ec19e7c74a8f22af3f7aaf90afac75524c9fd8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 24 May 2023 17:00:12 +0200 Subject: [PATCH 051/136] rename channels --- subworkflows/local/align.nf | 22 +++++++++---------- subworkflows/local/alignment/align_bwamem2.nf | 16 +++++++------- .../local/alignment/align_sentieon.nf | 14 ++++++------ subworkflows/local/annotate_snvs.nf | 4 ++-- .../local/annotate_structural_variants.nf | 8 +++---- subworkflows/local/call_repeat_expansions.nf | 12 +++++----- subworkflows/local/call_snv.nf | 18 +++++++-------- .../local/call_structural_variants.nf | 8 +++---- subworkflows/local/gens.nf | 20 ++++++++--------- subworkflows/local/prepare_references.nf | 22 +++++++++---------- subworkflows/local/qc_bam.nf | 18 +++++++-------- subworkflows/local/rank_variants.nf | 6 ++--- subworkflows/local/scatter_genome.nf | 10 ++++----- .../variant_calling/call_snv_deepvariant.nf | 16 +++++++------- .../variant_calling/call_snv_sentieon.nf | 16 +++++++------- .../local/variant_calling/call_sv_manta.nf | 16 +++++++------- .../local/variant_calling/call_sv_tiddit.nf | 10 ++++----- workflows/raredisease.nf | 22 +++++++++---------- 18 files changed, 129 insertions(+), 129 deletions(-) diff --git a/subworkflows/local/align.nf b/subworkflows/local/align.nf index 3af1f6e4..8e7b8652 100644 --- a/subworkflows/local/align.nf +++ b/subworkflows/local/align.nf @@ -9,10 +9,10 @@ include { SAMTOOLS_VIEW } from '../../modules/nf-core/samtools/view/main' workflow ALIGN { take: ch_reads_input // channel: [mandatory] [ val(meta), [path(reads)] ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_index_bwa // channel: [mandatory] [ val(meta), path(index) ] - ch_index_bwamem2 // channel: [mandatory] [ val(meta), path(index) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(index) ] + ch_bwamem2_index // channel: [mandatory] [ val(meta), path(index) ] ch_known_dbsnp // channel: [optional; used by sentieon] [ path(known_dbsnp) ] ch_known_dbsnp_tbi // channel: [optional; used by sentieon] [ path(known_dbsnp_tbi) ] val_platform // string: [mandatory] illumina or a different technology @@ -22,17 +22,17 @@ workflow ALIGN { ALIGN_BWAMEM2 ( ch_reads_input, - ch_index_bwamem2, - ch_fasta, - ch_fai, + ch_bwamem2_index, + ch_genome_fasta, + ch_genome_fai, val_platform ) ALIGN_SENTIEON ( ch_reads_input, - ch_fasta, - ch_fai, - ch_index_bwa, + ch_genome_fasta, + ch_genome_fai, + ch_bwa_index, ch_known_dbsnp, ch_known_dbsnp_tbi, val_platform @@ -42,7 +42,7 @@ workflow ALIGN { ch_marked_bai = Channel.empty().mix(ALIGN_BWAMEM2.out.marked_bai, ALIGN_SENTIEON.out.marked_bai) ch_bam_bai = ch_marked_bam.join(ch_marked_bai, failOnMismatch:true, failOnDuplicate:true) - SAMTOOLS_VIEW( ch_bam_bai, ch_fasta, [] ) + SAMTOOLS_VIEW( ch_bam_bai, ch_genome_fasta, [] ) ch_versions = Channel.empty().mix(ALIGN_BWAMEM2.out.versions, ALIGN_SENTIEON.out.versions) diff --git a/subworkflows/local/alignment/align_bwamem2.nf b/subworkflows/local/alignment/align_bwamem2.nf index 3771d293..d35fd9de 100644 --- a/subworkflows/local/alignment/align_bwamem2.nf +++ b/subworkflows/local/alignment/align_bwamem2.nf @@ -12,17 +12,17 @@ include { PICARD_MARKDUPLICATES as MARKDUPLICATES } from '../../../modules/nf-c workflow ALIGN_BWAMEM2 { take: - ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] - ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] - val_platform // string: [mandatory] default: illumina + ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] + ch_bwamem2_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + val_platform // string: [mandatory] default: illumina main: ch_versions = Channel.empty() // Map, sort, and index - BWAMEM2_MEM ( ch_reads_input, ch_index, true ) + BWAMEM2_MEM ( ch_reads_input, ch_bwamem2_index, true ) SAMTOOLS_INDEX_ALIGN ( BWAMEM2_MEM.out.bam ) @@ -45,11 +45,11 @@ workflow ALIGN_BWAMEM2 { .set{ bams } // If there are no samples to merge, skip the process - SAMTOOLS_MERGE ( bams.multiple, ch_fasta, ch_fai ) + SAMTOOLS_MERGE ( bams.multiple, ch_genome_fasta, ch_genome_fai ) prepared_bam = bams.single.mix(SAMTOOLS_MERGE.out.bam) // Marking duplicates - MARKDUPLICATES ( prepared_bam , ch_fasta, ch_fai ) + MARKDUPLICATES ( prepared_bam , ch_genome_fasta, ch_genome_fai ) SAMTOOLS_INDEX_MARKDUP ( MARKDUPLICATES.out.bam ) ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first()) diff --git a/subworkflows/local/alignment/align_sentieon.nf b/subworkflows/local/alignment/align_sentieon.nf index 2878bdec..e4094edf 100644 --- a/subworkflows/local/alignment/align_sentieon.nf +++ b/subworkflows/local/alignment/align_sentieon.nf @@ -12,9 +12,9 @@ include { SENTIEON_READWRITER } from '../../../modules/local/sentieon/readwr workflow ALIGN_SENTIEON { take: ch_reads_input // channel: [mandatory] [ val(meta), path(reads_input) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_index // channel: [mandatory] [ val(meta), path(bwamem2_index) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(bwa_index) ] ch_known_dbsnp // channel: [optional] [ path(known_dbsnp) ] ch_known_dbsnp_tbi // channel: [optional] [ path(known_dbsnp_tbi) ] val_platform // string: [mandatory] default: illumina @@ -25,7 +25,7 @@ workflow ALIGN_SENTIEON { ch_bqsr_bai = Channel.empty() ch_bqsr_csv = Channel.empty() - SENTIEON_BWAMEM ( ch_reads_input, ch_fasta, ch_fai, ch_index ) + SENTIEON_BWAMEM ( ch_reads_input, ch_genome_fasta, ch_genome_fai, ch_bwa_index ) SENTIEON_BWAMEM.out .bam @@ -45,7 +45,7 @@ workflow ALIGN_SENTIEON { SENTIEON_READWRITER (merge_bams_in.multiple) ch_bam_bai = merge_bams_in.single.mix(SENTIEON_READWRITER.out.bam_bai) - SENTIEON_DATAMETRICS (ch_bam_bai, ch_fasta, ch_fai ) + SENTIEON_DATAMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai ) SENTIEON_LOCUSCOLLECTOR ( ch_bam_bai ) @@ -54,13 +54,13 @@ workflow ALIGN_SENTIEON { .join(SENTIEON_LOCUSCOLLECTOR.out.score_idx, failOnMismatch:true, failOnDuplicate:true) .set { ch_bam_bai_score } - SENTIEON_DEDUP ( ch_bam_bai_score, ch_fasta, ch_fai ) + SENTIEON_DEDUP ( ch_bam_bai_score, ch_genome_fasta, ch_genome_fai ) if (params.variant_caller == "sentieon") { SENTIEON_DEDUP.out.bam .join(SENTIEON_DEDUP.out.bai, failOnMismatch:true, failOnDuplicate:true) .set { ch_dedup_bam_bai } - SENTIEON_BQSR ( ch_dedup_bam_bai, ch_fasta, ch_fai, ch_known_dbsnp, ch_known_dbsnp_tbi ) + SENTIEON_BQSR ( ch_dedup_bam_bai, ch_genome_fasta, ch_genome_fai, ch_known_dbsnp, ch_known_dbsnp_tbi ) ch_bqsr_bam = SENTIEON_BQSR.out.bam ch_bqsr_bai = SENTIEON_BQSR.out.bai ch_bqsr_csv = SENTIEON_BQSR.out.recal_csv diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 479723c9..589db4dd 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -29,7 +29,7 @@ workflow ANNOTATE_SNVS { val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_gnomad_af // channel: [optional] [ path(tab), path(tbi) ] ch_split_intervals // channel: [mandatory] [ path(intervals) ] ch_samples // channel: [mandatory] [ val(sample_id), val(sex), val(phenotype), val(paternal_id), val(maternal_id), val(case_id) ] @@ -109,7 +109,7 @@ workflow ANNOTATE_SNVS { // Annotating with ensembl Vep ENSEMBLVEP_SNV( ch_vep_in, - ch_fasta, + ch_genome_fasta, val_vep_genome, "homo_sapiens", val_vep_cache_version, diff --git a/subworkflows/local/annotate_structural_variants.nf b/subworkflows/local/annotate_structural_variants.nf index a43b28fe..be777ee2 100644 --- a/subworkflows/local/annotate_structural_variants.nf +++ b/subworkflows/local/annotate_structural_variants.nf @@ -16,8 +16,8 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { val_vep_genome // string: [mandatory] GRCh37 or GRCh38 val_vep_cache_version // string: [mandatory] default: 107 ch_vep_cache // channel: [mandatory] [ path(cache) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_seq_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] main: ch_versions = Channel.empty() @@ -42,7 +42,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ch_svdb_dbs.vcf_dbs.toList() ) - PICARD_SORTVCF(SVDB_QUERY.out.vcf, ch_fasta, ch_seq_dict) + PICARD_SORTVCF(SVDB_QUERY.out.vcf, ch_genome_fasta, ch_genome_dictionary) PICARD_SORTVCF.out.vcf.map { meta, vcf -> return [meta,vcf,[]] }.set { ch_sortvcf } @@ -50,7 +50,7 @@ workflow ANNOTATE_STRUCTURAL_VARIANTS { ENSEMBLVEP_SV( BCFTOOLS_VIEW.out.vcf, - ch_fasta, + ch_genome_fasta, val_vep_genome, "homo_sapiens", val_vep_cache_version, diff --git a/subworkflows/local/call_repeat_expansions.nf b/subworkflows/local/call_repeat_expansions.nf index 858792c6..8e527eab 100644 --- a/subworkflows/local/call_repeat_expansions.nf +++ b/subworkflows/local/call_repeat_expansions.nf @@ -18,23 +18,23 @@ workflow CALL_REPEAT_EXPANSIONS { ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] ch_variant_catalog // channel: [mandatory] [ path(variant_catalog.json) ] ch_case_info // channel: [mandatory] [ val(case_id) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] main: ch_versions = Channel.empty() EXPANSIONHUNTER ( ch_bam, - ch_fasta, - ch_fai, + ch_genome_fasta, + ch_genome_fai, ch_variant_catalog ) // Fix header and rename sample BCFTOOLS_REHEADER_EXP ( EXPANSIONHUNTER.out.vcf.map{ meta, vcf -> [ meta, vcf, [] ]}, - ch_fai + ch_genome_fai ) RENAMESAMPLE_EXP ( BCFTOOLS_REHEADER_EXP.out.vcf ) TABIX_EXP_RENAME ( RENAMESAMPLE_EXP.out.vcf ) @@ -42,7 +42,7 @@ workflow CALL_REPEAT_EXPANSIONS { // Split multi allelelic SPLIT_MULTIALLELICS_EXP ( RENAMESAMPLE_EXP.out.vcf.join(TABIX_EXP_RENAME.out.tbi, failOnMismatch:true, failOnDuplicate:true), - ch_fasta + ch_genome_fasta ) // Merge indiviual repeat expansions diff --git a/subworkflows/local/call_snv.nf b/subworkflows/local/call_snv.nf index 0f6ea2ca..b5128589 100644 --- a/subworkflows/local/call_snv.nf +++ b/subworkflows/local/call_snv.nf @@ -9,9 +9,9 @@ include { GATK4_SELECTVARIANTS } from '../../modules/nf-core/gatk4/selectvariant workflow CALL_SNV { take: - ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_known_dbsnp // channel: [optional] [ val(meta), path(vcf) ] ch_known_dbsnp_tbi // channel: [optional] [ val(meta), path(tbi) ] ch_call_interval // channel: [mandatory] [ path(intervals) ] @@ -24,16 +24,16 @@ workflow CALL_SNV { ch_tabix = Channel.empty() CALL_SNV_DEEPVARIANT ( - ch_input, - ch_fasta, - ch_fai, + ch_bam_bai, + ch_genome_fasta, + ch_genome_fai, ch_case_info ) CALL_SNV_SENTIEON( - ch_input, - ch_fasta, - ch_fai, + ch_bam_bai, + ch_genome_fasta, + ch_genome_fai, ch_known_dbsnp, ch_known_dbsnp_tbi, ch_call_interval, diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 5154a61f..41902244 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -14,20 +14,20 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_bai // channel: [mandatory] [ val(meta), path(bai) ] ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_case_info // channel: [mandatory] [ val(case_info) ] ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] main: ch_versions = Channel.empty() - CALL_SV_MANTA (ch_bam, ch_bai, ch_fasta, ch_fai, ch_case_info, ch_target_bed) + CALL_SV_MANTA (ch_bam, ch_bai, ch_genome_fasta, ch_genome_fai, ch_case_info, ch_target_bed) .diploid_sv_vcf .collect{it[1]} .set{ manta_vcf } - CALL_SV_TIDDIT (ch_bam_bai, ch_fasta, ch_bwa_index, ch_case_info) + CALL_SV_TIDDIT (ch_bam_bai, ch_genome_fasta, ch_bwa_index, ch_case_info) .vcf .collect{it[1]} .set { tiddit_vcf } diff --git a/subworkflows/local/gens.nf b/subworkflows/local/gens.nf index 6cc87a12..8e47cac7 100644 --- a/subworkflows/local/gens.nf +++ b/subworkflows/local/gens.nf @@ -8,20 +8,20 @@ include { GENS as GENS_GENERATE } from '../../modules/loc workflow GENS { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] - ch_interval_list // channel: [mandatory] [ path(interval_list) ] - ch_pon // channel: [mandatory] [ path(pon) ] - ch_gnomad_pos // channel: [mandatory] [ path(gnomad_pos) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_seq_dict // channel: [mandatory] [ path(dict) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_interval_list // channel: [mandatory] [ path(interval_list) ] + ch_pon // channel: [mandatory] [ path(pon) ] + ch_gnomad_pos // channel: [mandatory] [ path(gnomad_pos) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] main: ch_versions = Channel.empty() - COLLECTREADCOUNTS (ch_bam, ch_fasta, ch_fai, ch_seq_dict, ch_interval_list) + COLLECTREADCOUNTS (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_sequence_dictionary, ch_interval_list) DENOISEREADCOUNTS (COLLECTREADCOUNTS.out.read_counts, ch_pon) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 0138cbaa..4840463c 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -23,8 +23,8 @@ include { UNTAR as UNTAR_VEP_CACHE } from '../../modul workflow PREPARE_REFERENCES { take: - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fasta_mt // channel: [mandatory for dedicated mt analysis] [ val(meta), path(fasta) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_mt_fasta // channel: [mandatory for dedicated mt analysis] [ val(meta), path(fasta) ] ch_gnomad_af_tab // channel: [optional; used in for snv annotation] [ val(meta), path(tab) ] ch_known_dbsnp // channel: [optional; used only by sentieon] [ val(meta), path(vcf) ] ch_target_bed // channel: [mandatory for WES] [ path(bed) ] @@ -38,15 +38,15 @@ workflow PREPARE_REFERENCES { ch_sentieonbwa = Channel.empty() // Genome indices - BWA_INDEX_GENOME(ch_fasta).index.set{ch_bwa} - BWAMEM2_INDEX_GENOME(ch_fasta) - BWAMEM2_INDEX_SHIFT_MT(ch_fasta_mt) - SENTIEON_BWAINDEX_GENOME(ch_fasta).index.set{ch_sentieonbwa} - SENTIEON_BWAINDEX_SHIFT_MT(ch_fasta_mt) - SAMTOOLS_FAIDX_GENOME(ch_fasta) - SAMTOOLS_FAIDX_SHIFT_MT(ch_fasta_mt) - GATK_SD(ch_fasta) - GATK_SD_SHIFT_MT(ch_fasta_mt) + BWA_INDEX_GENOME(ch_genome_fasta).index.set{ch_bwa} + BWAMEM2_INDEX_GENOME(ch_genome_fasta) + BWAMEM2_INDEX_SHIFT_MT(ch_mt_fasta) + SENTIEON_BWAINDEX_GENOME(ch_genome_fasta).index.set{ch_sentieonbwa} + SENTIEON_BWAINDEX_SHIFT_MT(ch_mt_fasta) + SAMTOOLS_FAIDX_GENOME(ch_genome_fasta) + SAMTOOLS_FAIDX_SHIFT_MT(ch_mt_fasta) + GATK_SD(ch_genome_fasta) + GATK_SD_SHIFT_MT(ch_mt_fasta) GET_CHROM_SIZES( SAMTOOLS_FAIDX_GENOME.out.fai ) // Vcf, tab and bed indices diff --git a/subworkflows/local/qc_bam.nf b/subworkflows/local/qc_bam.nf index 27561988..06b55422 100644 --- a/subworkflows/local/qc_bam.nf +++ b/subworkflows/local/qc_bam.nf @@ -19,8 +19,8 @@ workflow QC_BAM { ch_bam // channel: [mandatory] [ val(meta), path(bam) ] ch_bai // channel: [mandatory] [ val(meta), path(bai) ] ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_bait_intervals // channel: [mandatory] [ path(intervals_list) ] ch_target_intervals // channel: [mandatory] [ path(intervals_list) ] ch_chrom_sizes // channel: [mandatory] [ path(sizes) ] @@ -30,14 +30,14 @@ workflow QC_BAM { main: ch_versions = Channel.empty() - PICARD_COLLECTMULTIPLEMETRICS (ch_bam_bai, ch_fasta, ch_fai) + PICARD_COLLECTMULTIPLEMETRICS (ch_bam_bai, ch_genome_fasta, ch_genome_fai) ch_bam_bai .combine(ch_bait_intervals) .combine(ch_target_intervals) .set { ch_hsmetrics_in} - PICARD_COLLECTHSMETRICS (ch_hsmetrics_in, ch_fasta, ch_fai, [[],[]]) + PICARD_COLLECTHSMETRICS (ch_hsmetrics_in, ch_genome_fasta, ch_genome_fai, [[],[]]) QUALIMAP_BAMQC (ch_bam, []) @@ -46,14 +46,14 @@ workflow QC_BAM { UCSC_WIGTOBIGWIG (TIDDIT_COV.out.wig, ch_chrom_sizes) ch_bam_bai.map{ meta, bam, bai -> [meta, bam, bai, []]}.set{ch_mosdepth_in} - MOSDEPTH (ch_mosdepth_in, ch_fasta) + MOSDEPTH (ch_mosdepth_in, ch_genome_fasta) // COLLECT WGS METRICS - PICARD_COLLECTWGSMETRICS ( ch_bam_bai, ch_fasta, ch_fai, ch_intervals_wgs ) - PICARD_COLLECTWGSMETRICS_Y ( ch_bam_bai, ch_fasta, ch_fai, ch_intervals_y ) + PICARD_COLLECTWGSMETRICS ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_wgs ) + PICARD_COLLECTWGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y ) - SENTIEON_WGSMETRICS ( ch_bam_bai, ch_fasta, ch_fai, ch_intervals_wgs ) - SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_fasta, ch_fai, ch_intervals_y ) + SENTIEON_WGSMETRICS ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_wgs ) + SENTIEON_WGSMETRICS_Y ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_intervals_y ) ch_cov = Channel.empty().mix(PICARD_COLLECTWGSMETRICS.out.metrics, SENTIEON_WGSMETRICS.out.wgs_metrics) ch_cov_y = Channel.empty().mix(PICARD_COLLECTWGSMETRICS_Y.out.metrics, SENTIEON_WGSMETRICS_Y.out.wgs_metrics) diff --git a/subworkflows/local/rank_variants.nf b/subworkflows/local/rank_variants.nf index f1a9c788..e274de33 100644 --- a/subworkflows/local/rank_variants.nf +++ b/subworkflows/local/rank_variants.nf @@ -12,7 +12,7 @@ workflow RANK_VARIANTS { take: ch_vcf // channel: [mandatory] [ val(meta), path(vcf) ] - ch_ped // channel: [mandatory] [ path(ped) ] + ch_pedfile // channel: [mandatory] [ path(ped) ] ch_reduced_penetrance // channel: [mandatory] [ path(pentrance) ] ch_score_config // channel: [mandatory] [ path(ini) ] @@ -21,9 +21,9 @@ workflow RANK_VARIANTS { GENMOD_ANNOTATE(ch_vcf) - GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ch_ped, ch_reduced_penetrance) + GENMOD_MODELS(GENMOD_ANNOTATE.out.vcf, ch_pedfile, ch_reduced_penetrance) - GENMOD_SCORE(GENMOD_MODELS.out.vcf, ch_ped, ch_score_config) + GENMOD_SCORE(GENMOD_MODELS.out.vcf, ch_pedfile, ch_score_config) GENMOD_COMPOUND(GENMOD_SCORE.out.vcf) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 6e759880..b05a2667 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -8,16 +8,16 @@ include { GATK4_SPLITINTERVALS } from '../../modules/nf-core/gatk4/splitinterval workflow SCATTER_GENOME { take: - ch_dict // channel: [mandatory] [ val(meta), path(dict) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] main: ch_versions = Channel.empty() - BUILD_BED (ch_fai) + BUILD_BED (ch_genome_fai) - GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_fasta, ch_fai, ch_dict) + GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_genome_fasta, ch_genome_fai, ch_genome_dict) ch_versions = ch_versions.mix(BUILD_BED.out.versions) ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) diff --git a/subworkflows/local/variant_calling/call_snv_deepvariant.nf b/subworkflows/local/variant_calling/call_snv_deepvariant.nf index ba9ded64..8324aa35 100644 --- a/subworkflows/local/variant_calling/call_snv_deepvariant.nf +++ b/subworkflows/local/variant_calling/call_snv_deepvariant.nf @@ -10,20 +10,20 @@ include { TABIX_TABIX as TABIX_GL } from '../../../modules/nf-co workflow CALL_SNV_DEEPVARIANT { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() - ch_bam.map { meta, bam, bai -> + ch_bam_bai.map { meta, bam, bai -> return [meta, bam, bai, []] } .set { ch_deepvar_in } - DEEPVARIANT ( ch_deepvar_in, ch_fasta, ch_fai, [[],[]] ) + DEEPVARIANT ( ch_deepvar_in, ch_genome_fasta, ch_genome_fai, [[],[]] ) DEEPVARIANT.out.gvcf .collect{it[1]} .toList() @@ -39,12 +39,12 @@ workflow CALL_SNV_DEEPVARIANT { ch_split_multi_in = GLNEXUS.out.bcf .map{ meta, bcf -> return [meta, bcf, []] } - SPLIT_MULTIALLELICS_GL (ch_split_multi_in, ch_fasta) + SPLIT_MULTIALLELICS_GL (ch_split_multi_in, ch_genome_fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_GL.out.vcf .map{ meta, vcf -> return [meta, vcf, []] } - REMOVE_DUPLICATES_GL (ch_remove_dup_in, ch_fasta) + REMOVE_DUPLICATES_GL (ch_remove_dup_in, ch_genome_fasta) TABIX_GL (REMOVE_DUPLICATES_GL.out.vcf) diff --git a/subworkflows/local/variant_calling/call_snv_sentieon.nf b/subworkflows/local/variant_calling/call_snv_sentieon.nf index 03b6c684..d1b8bbb2 100644 --- a/subworkflows/local/variant_calling/call_snv_sentieon.nf +++ b/subworkflows/local/variant_calling/call_snv_sentieon.nf @@ -14,9 +14,9 @@ include { BCFTOOLS_FILTER as BCF_FILTER_TWO } from '../../../modules/nf-c workflow CALL_SNV_SENTIEON { take: - ch_input // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ path(fasta) ] + ch_genome_fai // channel: [mandatory] [ path(fai) ] ch_dbsnp // channel: [mandatory] [ val(meta), path(vcf) ] ch_dbsnp_index // channel: [mandatory] [ val(meta), path(tbi) ] ch_call_interval // channel: [mandatory] [ path(interval) ] @@ -26,9 +26,9 @@ workflow CALL_SNV_SENTIEON { main: ch_versions = Channel.empty() - SENTIEON_DNASCOPE ( ch_input, ch_fasta, ch_fai, ch_dbsnp, ch_dbsnp_index, ch_call_interval, ch_ml_model ) + SENTIEON_DNASCOPE ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_dbsnp, ch_dbsnp_index, ch_call_interval, ch_ml_model ) - SENTIEON_DNAMODELAPPLY ( SENTIEON_DNASCOPE.out.vcf_index, ch_fasta, ch_fai, ch_ml_model ) + SENTIEON_DNAMODELAPPLY ( SENTIEON_DNASCOPE.out.vcf_index, ch_genome_fasta, ch_genome_fai, ch_ml_model ) BCF_FILTER_ONE (SENTIEON_DNAMODELAPPLY.out.vcf ) @@ -49,7 +49,7 @@ workflow CALL_SNV_SENTIEON { } .set{ ch_vcf_idx_merge_in } - BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple, [], ch_fasta, ch_fai) + BCFTOOLS_MERGE(ch_vcf_idx_merge_in.multiple, ch_genome_fasta, ch_genome_fai, []) ch_split_multi_in = BCFTOOLS_MERGE.out.merged_variants .map{meta, bcf -> @@ -57,13 +57,13 @@ workflow CALL_SNV_SENTIEON { ch_vcf_idx_case = ch_vcf_idx_merge_in.single.mix(ch_split_multi_in) - SPLIT_MULTIALLELICS_SEN(ch_vcf_idx_case, ch_fasta) + SPLIT_MULTIALLELICS_SEN(ch_vcf_idx_case, ch_genome_fasta) ch_remove_dup_in = SPLIT_MULTIALLELICS_SEN.out.vcf .map{meta, vcf -> return [meta, vcf, []]} - REMOVE_DUPLICATES_SEN(ch_remove_dup_in, ch_fasta) + REMOVE_DUPLICATES_SEN(ch_remove_dup_in, ch_genome_fasta) TABIX_SEN(REMOVE_DUPLICATES_SEN.out.vcf) diff --git a/subworkflows/local/variant_calling/call_sv_manta.nf b/subworkflows/local/variant_calling/call_sv_manta.nf index 2fbf4bec..af58650f 100644 --- a/subworkflows/local/variant_calling/call_sv_manta.nf +++ b/subworkflows/local/variant_calling/call_sv_manta.nf @@ -6,12 +6,12 @@ include { MANTA_GERMLINE as MANTA } from '../../../modules/nf-core/manta/germlin workflow CALL_SV_MANTA { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam) ] - ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_fasta // channel: [mandatory] [ path(fasta) ] - ch_fai // channel: [mandatory] [ path(fai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] main: ch_bam.collect{it[1]} @@ -32,13 +32,13 @@ workflow CALL_SV_MANTA { .combine(bai_file_list) .map { it -> it + [ [], [] ] } .set { manta_input } - MANTA ( manta_input, ch_fasta, ch_fai ) + MANTA ( manta_input, ch_genome_fasta, ch_genome_fai ) } else { ch_case_info.combine(bam_file_list) .combine(bai_file_list) .combine(bed_input) .set { manta_input } - MANTA ( manta_input, ch_fasta, ch_fai ) + MANTA ( manta_input, ch_genome_fasta, ch_genome_fai ) } ch_versions = MANTA.out.versions diff --git a/subworkflows/local/variant_calling/call_sv_tiddit.nf b/subworkflows/local/variant_calling/call_sv_tiddit.nf index 329b11b4..f033c51e 100644 --- a/subworkflows/local/variant_calling/call_sv_tiddit.nf +++ b/subworkflows/local/variant_calling/call_sv_tiddit.nf @@ -7,13 +7,13 @@ include { SVDB_MERGE as SVDB_MERGE_TIDDIT } from '../../../modules/nf-core/svdb/ workflow CALL_SV_TIDDIT { take: - ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_index // channel: [mandatory] [ val(meta), path(index)] - ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: - TIDDIT_SV ( ch_bam_bai, ch_fasta, ch_index ) + TIDDIT_SV ( ch_bam_bai, ch_genome_fasta, ch_bwa_index ) TIDDIT_SV.out .vcf diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8555e1f4..fd05dd20 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -230,7 +230,7 @@ workflow RAREDISEASE { : Channel.value([]) // Generate pedigree file - pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } + ch_pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } // Input QC FASTQC (CHECK_INPUT.out.reads) @@ -268,7 +268,7 @@ workflow RAREDISEASE { : Channel.empty() ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.known_dbsnp_tbi.ifEmpty([[],[]]) - ch_sequence_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() + ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.sequence_dict ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.sequence_dict_mt_shift @@ -280,7 +280,7 @@ workflow RAREDISEASE { // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( - ch_sequence_dictionary, + ch_genome_dictionary, ch_genome_fai, ch_genome_fasta ) @@ -376,7 +376,7 @@ workflow RAREDISEASE { // ped correspondence, sex check, ancestry check PEDDY_CHECK ( CALL_SNV.out.vcf.join(CALL_SNV.out.tabix, failOnMismatch:true, failOnDuplicate:true), - pedfile + ch_pedfile ) ch_versions = ch_versions.mix(PEDDY_CHECK.out.versions) @@ -385,13 +385,13 @@ workflow RAREDISEASE { GENS ( ch_mapped.bam_bai, CALL_SNV.out.vcf, - ch_genome_fasta_meta, - ch_genome_fai_no_meta, + ch_genome_fasta, + ch_genome_fai, file(params.gens_interval_list), file(params.gens_pon), file(params.gens_gnomad_pos), CHECK_INPUT.out.case_info, - ch_sequence_dictionary_no_meta + ch_genome_dictionary ) ch_versions = ch_versions.mix(GENS.out.versions) } @@ -404,7 +404,7 @@ workflow RAREDISEASE { params.vep_cache_version, ch_vep_cache, ch_genome_fasta, - ch_sequence_dictionary + ch_genome_dictionary ).set {ch_sv_annotate} ch_versions = ch_versions.mix(ch_sv_annotate.versions) @@ -416,7 +416,7 @@ workflow RAREDISEASE { RANK_VARIANTS_SV ( ANN_CSQ_PLI_SV.out.vcf_ann, - pedfile, + ch_pedfile, ch_reduced_penetrance, ch_score_config_sv ) @@ -439,7 +439,7 @@ workflow RAREDISEASE { ch_bwamem2_index, ch_genome_fasta, ch_genome_fai, - ch_sequence_dictionary, + ch_genome_dictionary, ch_mt_intervals, ch_bwa_index_mt_shift, ch_bwamem2_index_mt_shift, @@ -524,7 +524,7 @@ workflow RAREDISEASE { RANK_VARIANTS_SNV ( ANN_CSQ_PLI_SNV.out.vcf_ann, - pedfile, + ch_pedfile, ch_reduced_penetrance, ch_score_config_snv ) From e6a36c13233907c4311ebd9c8c8c49da56f4c463 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 May 2023 14:10:01 +0200 Subject: [PATCH 052/136] Update subworkflows/local/scatter_genome.nf [skip CI] Co-authored-by: Anders Jemt --- subworkflows/local/scatter_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index b05a2667..065887e9 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -8,7 +8,7 @@ include { GATK4_SPLITINTERVALS } from '../../modules/nf-core/gatk4/splitinterval workflow SCATTER_GENOME { take: - ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_genome_dictionary // channel: [mandatory] [ val(meta), path(dict) ] ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] From 8462e883c36419830607ef42c439384480cc6af9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 May 2023 14:10:11 +0200 Subject: [PATCH 053/136] Update subworkflows/local/scatter_genome.nf Co-authored-by: Anders Jemt --- subworkflows/local/scatter_genome.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/scatter_genome.nf b/subworkflows/local/scatter_genome.nf index 065887e9..db95dfb2 100644 --- a/subworkflows/local/scatter_genome.nf +++ b/subworkflows/local/scatter_genome.nf @@ -17,7 +17,7 @@ workflow SCATTER_GENOME { BUILD_BED (ch_genome_fai) - GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_genome_fasta, ch_genome_fai, ch_genome_dict) + GATK4_SPLITINTERVALS(BUILD_BED.out.bed, ch_genome_fasta, ch_genome_fai, ch_genome_dictionary) ch_versions = ch_versions.mix(BUILD_BED.out.versions) ch_versions = ch_versions.mix(GATK4_SPLITINTERVALS.out.versions) From 23656781af9b33f8f14e0daa193f60b24e5bef30 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Thu, 25 May 2023 15:57:21 +0200 Subject: [PATCH 054/136] Update modules/local/mt_deletion_scritp.nf Co-authored-by: Anders Jemt --- modules/local/mt_deletion_scritp.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/mt_deletion_scritp.nf b/modules/local/mt_deletion_scritp.nf index ac1a1a1f..9168b661 100644 --- a/modules/local/mt_deletion_scritp.nf +++ b/modules/local/mt_deletion_scritp.nf @@ -11,7 +11,7 @@ process MT_DELETION { tuple val(meta), path(stats) output: - tuple val(meta), path('*.txt'), emit: mt_del_script + tuple val(meta), path('*.txt'), emit: mt_del_result path "versions.yml" , emit: versions when: From 7162cd7822b73bedea76888b4430a6c0bcea86b0 Mon Sep 17 00:00:00 2001 From: Lucpen Date: Thu, 25 May 2023 15:57:38 +0200 Subject: [PATCH 055/136] Update subworkflows/local/mitochondria/align_and_call_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/mitochondria/align_and_call_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index e80e3d3d..70fc7d2a 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -14,7 +14,7 @@ include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } fr include { GATK4_FILTERMUTECTCALLS as GATK4_FILTERMUTECTCALLS_MT } from '../../../modules/nf-core/gatk4/filtermutectcalls/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' include { SAMTOOLS_STATS as SAMTOOLS_STATS_MT } from '../../../modules/nf-core/samtools/stats/main' -include { MT_DELETION } from '../../../modules/local/mt_deletion_scritp' +include { MT_DELETION } from '../../../modules/local/mt_deletion_script' workflow ALIGN_AND_CALL_MT { take: From a9a9554287a6aaea375ac3923083f35303f8461b Mon Sep 17 00:00:00 2001 From: Lucpen Date: Thu, 25 May 2023 15:57:44 +0200 Subject: [PATCH 056/136] Update subworkflows/local/mitochondria/align_and_call_MT.nf Co-authored-by: Anders Jemt --- subworkflows/local/mitochondria/align_and_call_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 70fc7d2a..992ae1e6 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -86,6 +86,6 @@ workflow ALIGN_AND_CALL_MT { filt_stats = GATK4_FILTERMUTECTCALLS_MT.out.stats // channel: [ val(meta), path(tsv) ] txt = HAPLOCHECK_MT.out.txt // channel: [ val(meta), path(txt) ] html = HAPLOCHECK_MT.out.html // channel: [ val(meta), path(html) ] - mt_del_result = MT_DELETION.out.mt_del_script // channel: [ val(meta), path(txt) ] + mt_del_result = MT_DELETION.out.mt_del_result // channel: [ val(meta), path(txt) ] versions = ch_versions // channel: [ path(versions.yml) ] } From f6afe61dbe88945c381a0788d1a6fb61cb356718 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 25 May 2023 16:35:31 +0200 Subject: [PATCH 057/136] add module and remove redundant parameters --- conf/modules/prepare_references.config | 9 + main.nf | 9 +- modules.json | 283 ++++++++++++++++------ modules/nf-core/gatk4/shiftfasta/main.nf | 66 +++++ modules/nf-core/gatk4/shiftfasta/meta.yml | 81 +++++++ modules/nf-core/samtools/faidx/main.nf | 12 +- modules/nf-core/samtools/faidx/meta.yml | 14 +- nextflow_schema.json | 58 +---- subworkflows/local/prepare_references.nf | 30 ++- workflows/raredisease.nf | 36 ++- 10 files changed, 426 insertions(+), 172 deletions(-) create mode 100644 modules/nf-core/gatk4/shiftfasta/main.nf create mode 100644 modules/nf-core/gatk4/shiftfasta/meta.yml diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 8504a34c..af73549a 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -49,6 +49,11 @@ process { ext.when = {!params.fai} } + withName: '.*PREPARE_REFERENCES:SAMTOOLS_EXTRACT_MT' { + ext.args = { " ${params.mito_name} -o ${meta.id}_mt.fa" } + ext.when = {!params.mt_fasta && !params.skip_mt_analysis} + } + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { ext.when = {!params.mt_fai_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} } @@ -57,6 +62,10 @@ process { ext.when = {!params.sequence_dictionary} } + withName: '.*PREPARE_REFERENCES:GATK_SHIFTFASTA' { + ext.args = { "--interval-file-name ${meta.id}_mt" } + } + withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} } diff --git a/main.nf b/main.nf index 7e0ceb8a..fe93d397 100644 --- a/main.nf +++ b/main.nf @@ -32,14 +32,7 @@ params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_indels') params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') -params.mt_backchain_shift = WorkflowMain.getGenomeAttribute(params, 'mt_backchain_shift') -params.mt_bwa_index_shift = WorkflowMain.getGenomeAttribute(params, 'mt_bwa_index_shift') -params.mt_bwamem2_index_shift = WorkflowMain.getGenomeAttribute(params, 'mt_bwamem2_index_shift') -params.mt_fasta_shift = WorkflowMain.getGenomeAttribute(params, 'mt_fasta_shift') -params.mt_fai_shift = WorkflowMain.getGenomeAttribute(params, 'mt_fai_shift') -params.mt_intervals = WorkflowMain.getGenomeAttribute(params, 'mt_intervals') -params.mt_intervals_shift = WorkflowMain.getGenomeAttribute(params, 'mt_intervals_shift') -params.mt_sequence_dictionary_shift = WorkflowMain.getGenomeAttribute(params, 'mt_sequence_dictionary_shift') +params.mt_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_fasta') params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') params.sequence_dictionary = WorkflowMain.getGenomeAttribute(params, 'sequence_dictionary') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') diff --git a/modules.json b/modules.json index 6b0ebcbc..0622ed2e 100644 --- a/modules.json +++ b/modules.json @@ -8,345 +8,488 @@ "bcftools/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/concat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/filter": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/merge": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/norm": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/reheader": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/roh": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/view": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwa/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwamem2/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwamem2/mem": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cadd": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "deepvariant": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mutect2": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/printreads": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/revertsam": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] + }, + "gatk4/shiftfasta": { + "branch": "master", + "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "installed_by": [ + "modules" + ] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/compound": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/models": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/score": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "glnexus": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplocheck": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplogrep2/classify": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "manta/germline": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mosdepth": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "peddy": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "0ce3ab0ac301f160225b22254fa238478b4389f2", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/liftovervcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/markduplicates": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/renamesampleinvcf": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/sortvcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "qualimap/bamqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rhocall/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "git_sha": "bf8ff98531167f8245ba5c44ce7d781503ddf936", + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stranger": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "svdb/merge": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "svdb/query": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "01b3b2509d76625b6d6cd613b349fb4777712a15", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/tabix": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/cov": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/sv": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "untar": { "branch": "master", "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "vcfanno": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/gatk4/shiftfasta/main.nf b/modules/nf-core/gatk4/shiftfasta/main.nf new file mode 100644 index 00000000..cf984e8b --- /dev/null +++ b/modules/nf-core/gatk4/shiftfasta/main.nf @@ -0,0 +1,66 @@ +process GATK4_SHIFTFASTA { + tag "$meta.id" + label 'process_single' + + conda "bioconda::gatk4=4.4.0.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + + input: + tuple val(meta), path(fasta) + tuple val(meta2), path(fasta_fai) + tuple val(meta3), path(dict) + + output: + tuple val(meta), path("*_shift.fasta") , emit: shift_fa + tuple val(meta), path("*_shift.fasta.fai") , emit: shift_fai + tuple val(meta), path("*_shift.back_chain") , emit: shift_back_chain + tuple val(meta), path("*_shift.dict") , emit: dict , optional: true + tuple val(meta), path("*.intervals") , emit: intervals , optional: true + tuple val(meta), path("*.shifted.intervals") , emit: shift_intervals , 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 seq_dict = dict ? "--sequence-dictionary ${dict}" : "" + def avail_mem = 3072 + if (!task.memory) { + log.info '[GATK ShiftFasta] 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" ShiftFasta \\ + --reference $fasta \\ + --output ${prefix}_shift.fasta \\ + --shift-back-output ${prefix}_shift.back_chain \\ + $args \\ + $seq_dict \\ + --tmp-dir . + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') + END_VERSIONS + """ + + stub: + """ + touch test.intervals + touch test_shift.back_chain + touch test_shift.dict + touch test.shifted.intervals + touch test_shift.fasta + touch test_shift.fasta.fai + + 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/shiftfasta/meta.yml b/modules/nf-core/gatk4/shiftfasta/meta.yml new file mode 100644 index 00000000..6d563ded --- /dev/null +++ b/modules/nf-core/gatk4/shiftfasta/meta.yml @@ -0,0 +1,81 @@ +name: "gatk4_shiftfasta" +description: Create a fasta with the bases shifted by offset +keywords: + - mitochondria + - shiftfasta + - shiftchain + - shiftintervals +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 + tool_dev_url: "https://github.com/broadinstitute/gatk" + doi: 10.1158/1538-7445.AM2017-3590 + licence: ["Apache-2.0"] + +input: + - meta: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta: + type: file + description: fasta file + pattern: "*.{fa,fasta}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fasta_fai: + type: file + description: index for fasta file + pattern: "*.{fai}" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - dict: + type: file + description: sequence dictionary file + pattern: "*.{dict}" + +output: + - meta: + type: map + description: | + Groovy Map containing fasta information + e.g. [ id:'test' ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - dict: + type: file + description: sequence dictionary file + pattern: "*.{dict}" + - intervals: + type: file + description: Intervals file for the fasta file + pattern: "*.{intervals}" + - shift_back_chain: + type: file + description: The shiftback chain file to use when lifting over + pattern: "*.{back_chain}" + - shift_fa: + type: file + description: Shifted fasta file + pattern: "*.{fa,fasta}" + - shift_intervals: + type: file + description: Intervals file for the shifted fasta file + pattern: "*.{shifted.intervals}" + +authors: + - "@ramprasadn" diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 4dd0e5b0..c1e8ef3a 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -9,11 +9,13 @@ process SAMTOOLS_FAIDX { input: tuple val(meta), path(fasta) + tuple val(meta2), path(fai) output: - tuple val(meta), path ("*.fai"), emit: fai - tuple val(meta), path ("*.gzi"), emit: gzi, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path ("*.{fa,fasta}") , emit: fa , optional: true + tuple val(meta), path ("*.fai") , emit: fai, optional: true + tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -23,8 +25,8 @@ process SAMTOOLS_FAIDX { """ samtools \\ faidx \\ - $args \\ - $fasta + $fasta \\ + $args cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index fe2fe9a1..957b25e5 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -3,6 +3,7 @@ description: Index FASTA file keywords: - index - fasta + - faidx tools: - samtools: description: | @@ -17,12 +18,21 @@ input: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: FASTA file pattern: "*.{fa,fasta}" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - fai: + type: file + description: FASTA index file + pattern: "*.{fai}" output: - meta: type: map diff --git a/nextflow_schema.json b/nextflow_schema.json index 842d6375..44810f84 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -156,22 +156,6 @@ "description": "Name of the mitochondrial contig in the reference fasta file", "help_text": "Used to extract relevant information from the references to analyse mitochondria" }, - "mt_intervals": { - "type": "string", - "format": "path", - "fa_icon": "fas fa-file", - "pattern": "^\\S+\\.intervals?(_list)?$", - "description": "Path to the interval list of the non control mitochondral region.", - "help_text": "Path to the interval list of the non control mitochondral regions for Mutect2" - }, - "mt_intervals_shift": { - "type": "string", - "format": "path", - "fa_icon": "fas fa-file", - "pattern": "^\\S+\\.intervals?(\\_list)?$", - "description": "Path to the interval list of the non control mitochondral region in shifted fasta.", - "help_text": "Path to the interval list of the non control mitochondral regions in shifted fasta for Mutect2" - }, "known_dbsnp": { "type": "string", "format": "path", @@ -211,7 +195,7 @@ "description": "Path to sentieon machine learning model file.", "hidden": true }, - "mt_fasta_shift": { + "mt_fasta": { "type": "string", "format": "file-path", "mimetype": "text/plain", @@ -219,38 +203,6 @@ "description": "Path to mitochondrial FASTA genome file.", "fa_icon": "far fa-file-code" }, - "mt_fai_shift": { - "type": "string", - "format": "file-path", - "mimetype": "text/plain", - "pattern": "^\\S+\\.fn?a(sta)?\\.fai?$", - "description": "Path to mitochondrial FASTA genome index file.", - "fa_icon": "far fa-file-code" - }, - "mt_bwa_index_shift": { - "type": "string", - "format": "directory-path", - "description": "Directory for pre-built bwa index for shifted mitochondrial fasta (used for alignment with sentioen)", - "help_text": "If none provided, will be generated automatically from the FASTA reference.", - "fa_icon": "fas fa-folder-open", - "hidden": true - }, - "mt_bwamem2_index_shift": { - "type": "string", - "format": "directory-path", - "description": "Directory for pre-built bwamem2 index for shifted mitochondrial fasta.", - "help_text": "If none provided, will be generated automatically from the FASTA reference.", - "fa_icon": "fas fa-folder-open", - "hidden": true - }, - "mt_backchain_shift": { - "type": "string", - "format": "directory-path", - "description": "Chain file describing the alignment between the mitochondrial shifted fasta and typical mitochondrial fasta", - "help_text": "For more information, check https://genome.ucsc.edu/goldenPath/help/chain.html", - "fa_icon": "fas fa-folder-open", - "hidden": true - }, "reduced_penetrance": { "type": "string", "format": "path", @@ -280,14 +232,6 @@ "description": "Genome dictionary file", "hidden": true }, - "mt_sequence_dictionary_shift": { - "type": "string", - "format": "path", - "fa_icon": "fas fa-chart-bar", - "pattern": "^\\S+\\.dict$", - "description": "Shifted mitochondrial genome dictionary file", - "hidden": true - }, "vep_filters": { "type": "string", "format": "path", diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 0138cbaa..0ac46211 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -10,9 +10,12 @@ include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modul include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD_SHIFT_MT } from '../../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/gatk4/intervallisttools/main' +include { GATK4_SHIFTFASTA as GATK_SHIFTFASTA } from '../../modules/nf-core/gatk4/shiftfasta/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' +include { SAMTOOLS_FAIDX as SAMTOOLS_EXTRACT_MT } from '../../modules/nf-core/samtools/faidx/main' include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_GENOME } from '../../modules/nf-core/samtools/faidx/main' -include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_SHIFT_MT } from '../../modules/nf-core/samtools/faidx/main' +include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_MT } from '../../modules/nf-core/samtools/faidx/main' +include { SAMTOOLS_FAIDX as SAMTOOLS_FAIDX_MT_SHIFT } from '../../modules/nf-core/samtools/faidx/main' include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_GENOME } from '../../modules/local/sentieon/bwamemindex' include { SENTIEON_BWAINDEX as SENTIEON_BWAINDEX_SHIFT_MT } from '../../modules/local/sentieon/bwamemindex' include { TABIX_BGZIPTABIX as TABIX_PBT } from '../../modules/nf-core/tabix/bgziptabix/main' @@ -24,7 +27,8 @@ include { UNTAR as UNTAR_VEP_CACHE } from '../../modul workflow PREPARE_REFERENCES { take: ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_fasta_mt // channel: [mandatory for dedicated mt analysis] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_fasta_mt // channel: [optional for dedicated mt analysis] [ val(meta), path(fasta) ] ch_gnomad_af_tab // channel: [optional; used in for snv annotation] [ val(meta), path(tab) ] ch_known_dbsnp // channel: [optional; used only by sentieon] [ val(meta), path(vcf) ] ch_target_bed // channel: [mandatory for WES] [ path(bed) ] @@ -40,15 +44,21 @@ workflow PREPARE_REFERENCES { // Genome indices BWA_INDEX_GENOME(ch_fasta).index.set{ch_bwa} BWAMEM2_INDEX_GENOME(ch_fasta) - BWAMEM2_INDEX_SHIFT_MT(ch_fasta_mt) SENTIEON_BWAINDEX_GENOME(ch_fasta).index.set{ch_sentieonbwa} - SENTIEON_BWAINDEX_SHIFT_MT(ch_fasta_mt) - SAMTOOLS_FAIDX_GENOME(ch_fasta) - SAMTOOLS_FAIDX_SHIFT_MT(ch_fasta_mt) + SAMTOOLS_FAIDX_GENOME(ch_fasta, [[],[]]) GATK_SD(ch_fasta) - GATK_SD_SHIFT_MT(ch_fasta_mt) GET_CHROM_SIZES( SAMTOOLS_FAIDX_GENOME.out.fai ) + // MT indices + BWAMEM2_INDEX_SHIFT_MT(ch_fasta_mt) + SENTIEON_BWAINDEX_SHIFT_MT(ch_fasta_mt) + ch_fai = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() + SAMTOOLS_EXTRACT_MT(ch_fasta, ch_fai) + ch_mt_fasta = Channel.empty().mix(ch_genome_fai, SAMTOOLS_FAIDX_GENOME.out.fai).collect() + GATK_SD_SHIFT_MT(SAMTOOLS_EXTRACT_MT.out.fa) + SAMTOOLS_FAIDX_MT_SHIFT(SAMTOOLS_EXTRACT_MT.out.fa, [[],[]]) + GATK_SHIFTFASTA(SAMTOOLS_EXTRACT_MT.out.fa,SAMTOOLS_FAIDX_MT_SHIFT.out.fai, GATK_SD_SHIFT_MT.out.dict) + // Vcf, tab and bed indices TABIX_DBSNP(ch_known_dbsnp) TABIX_GNOMAD_AF(ch_gnomad_af_tab) @@ -75,7 +85,7 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_GENOME.out.versions) ch_versions = ch_versions.mix(SENTIEON_BWAINDEX_SHIFT_MT.out.versions) ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_GENOME.out.versions) - ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_SHIFT_MT.out.versions) + ch_versions = ch_versions.mix(SAMTOOLS_FAIDX_MT_SHIFT.out.versions) ch_versions = ch_versions.mix(GATK_SD.out.versions) ch_versions = ch_versions.mix(GATK_SD_SHIFT_MT.out.versions) ch_versions = ch_versions.mix(GET_CHROM_SIZES.out.versions) @@ -94,8 +104,8 @@ workflow PREPARE_REFERENCES { bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] bwamem2_index_mt_shift = BWAMEM2_INDEX_SHIFT_MT.out.index.collect() // channel: [ val(meta), path(index) ] chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] - fai = SAMTOOLS_FAIDX_GENOME.out.fai.collect() // channel: [ val(meta), path(fai) ] - fai_mt_shift = SAMTOOLS_FAIDX_SHIFT_MT.out.fai.collect() // channel: [ val(meta), path(fai) ] + fai = ch_fai // channel: [ val(meta), path(fai) ] + fai_mt_shift = SAMTOOLS_FAIDX_MT_SHIFT.out.fai.collect() // channel: [ val(meta), path(fai) ] gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] sequence_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 8555e1f4..61aa8a29 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -30,14 +30,7 @@ def checkPathParamList = [ params.known_indels, params.known_mills, params.ml_model, - params.mt_backchain_shift, - params.mt_bwa_index_shift, - params.mt_bwamem2_index_shift, - params.mt_fasta_shift, - params.mt_fai_shift, - params.mt_intervals, - params.mt_intervals_shift, - params.mt_sequence_dictionary_shift, + params.mt_fasta, params.multiqc_config, params.reduced_penetrance, params.score_config_snv, @@ -82,8 +75,7 @@ if (!params.skip_sv_annotation) { } if (!params.skip_mt_analysis) { - mandatoryParams += ["genome", "mt_backchain_shift", "mito_name", "mt_fasta_shift", "mt_intervals", - "mt_intervals_shift", "vcfanno_resources", "vcfanno_toml", "vep_cache_version", "vep_cache"] + mandatoryParams += ["genome", "mito_name", "vcfanno_resources", "vcfanno_toml", "vep_cache_version", "vep_cache"] } if (params.analysis_type.equals("wes")) { @@ -190,6 +182,8 @@ workflow RAREDISEASE { : Channel.value([]) ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() : Channel.value([]) + ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.value([]) ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() : Channel.value([[],[]]) ch_intervals_wgs = params.intervals_wgs ? Channel.fromPath(params.intervals_wgs).collect() @@ -200,14 +194,8 @@ workflow RAREDISEASE { : Channel.value([[],[]]) ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).collect() : Channel.value([]) - ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([]) - ch_mt_fasta_shift = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift).map { it -> [[id:it[0].simpleName], it] }.collect() + ch_mt_fasta = params.mt_fasta ? Channel.fromPath(params.mt_fasta).map { it -> [[id:it[0].simpleName], it] }.collect() : Channel.empty() - ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals).collect() - : Channel.value([]) - ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() - : Channel.value([]) ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() @@ -239,7 +227,8 @@ workflow RAREDISEASE { // Prepare references and indices. PREPARE_REFERENCES ( ch_genome_fasta, - ch_mt_fasta_shift, + ch_genome_fai, + ch_mt_fasta, ch_gnomad_af_tab, ch_known_dbsnp, ch_target_bed_unprocessed, @@ -258,10 +247,17 @@ workflow RAREDISEASE { ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.bwamem2_index_mt_shift ch_chrom_sizes = ch_references.chrom_sizes - ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.fai + ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([]) + ch_mt_fasta_shift = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift).map { it -> [[id:it[0].simpleName], it] }.collect() + : Channel.empty() + ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals).collect() + : Channel.value([]) + ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() + : Channel.value([]) ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.fai_mt_shift + ch_genome_fai = ch_references.fai ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() : ch_references.gnomad_af_idx ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_gnomad_af_idx).map {meta, tab, idx -> [tab,idx]}.collect() From 49dd613f6c2861a839ab9f0c51ad9cd7a838bfce Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 May 2023 10:36:38 +0200 Subject: [PATCH 058/136] update configs --- conf/modules/align_and_call_MT.config | 14 +- conf/modules/analyse_MT.config | 2 +- conf/modules/convert_mt_bam_to_fastq.config | 3 - conf/modules/merge_annotate_MT.config | 3 - conf/test.config | 4 - conf/test_one_sample.config | 4 - subworkflows/local/analyse_MT.nf | 62 ++++---- subworkflows/local/prepare_references.nf | 40 ++--- workflows/raredisease.nf | 157 ++++++++++---------- 9 files changed, 131 insertions(+), 158 deletions(-) diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config index c4915c11..32e9ed0c 100644 --- a/conf/modules/align_and_call_MT.config +++ b/conf/modules/align_and_call_MT.config @@ -16,18 +16,15 @@ // process { - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:.*' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:BWAMEM2_MEM_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") && params.aligner == "sentieon" } + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } ext.prefix = { "${meta.id}.sorted" } } @@ -69,18 +66,15 @@ process { // process { - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:.*' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } - } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:BWAMEM2_MEM_MT' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2" } ext.args = { "-M -K 100000000 -R ${meta.read_group}" } } withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT_SHIFT:SENTIEON_BWAMEM_MT' { ext.args = { "-M -K 10000000 -R ${meta.read_group}" } - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") && params.aligner == "sentieon" } + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon" } ext.prefix = { "${meta.id}.sorted" } } diff --git a/conf/modules/analyse_MT.config b/conf/modules/analyse_MT.config index 85568e3e..4ee1b693 100644 --- a/conf/modules/analyse_MT.config +++ b/conf/modules/analyse_MT.config @@ -17,6 +17,7 @@ process { withName: '.*ANALYSE_MT:.*' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") } publishDir = [ enabled: false ] @@ -25,7 +26,6 @@ process { process { withName: '.*ANALYSE_MT:PICARD_LIFTOVERVCF' { - ext.when = { params.mt_fasta_shift && params.mt_intervals_shift && !(params.analysis_type == "wes") } ext.prefix = { "${meta.id}_liftover" } } } diff --git a/conf/modules/convert_mt_bam_to_fastq.config b/conf/modules/convert_mt_bam_to_fastq.config index 5cba99b5..9a683b6e 100644 --- a/conf/modules/convert_mt_bam_to_fastq.config +++ b/conf/modules/convert_mt_bam_to_fastq.config @@ -16,9 +16,6 @@ // process { - withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:.*' { - ext.when = { params.mt_fasta_shift && !(params.analysis_type == "wes") } - } withName: '.*ANALYSE_MT:CONVERT_MT_BAM_TO_FASTQ:GATK4_PRINTREADS_MT' { beforeScript = {"mkdir ./tmp"} diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index d62cf73c..a1b41a90 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -16,9 +16,6 @@ // process { - withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:.*' { - ext.when = { params.mt_fasta_shift && params.mt_intervals && !(params.analysis_type == "wes") } - } withName: '.*ANALYSE_MT:MERGE_ANNOTATE_MT:GATK4_MERGEVCFS_LIFT_UNLIFT_MT' { ext.prefix = { "${meta.id}_merged" } diff --git a/conf/test.config b/conf/test.config index 805f84d6..c3ed9011 100644 --- a/conf/test.config +++ b/conf/test.config @@ -34,10 +34,6 @@ params { intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/targetY.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" - mt_fasta_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.fa" - mt_intervals = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt.intervals" - mt_intervals_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.intervals" - mt_backchain_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.back_chain" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_sv.ini" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index e4f73a33..85efab52 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -34,10 +34,6 @@ params { intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/targetY.interval_list" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" - mt_fasta_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.fa" - mt_intervals = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt.intervals" - mt_intervals_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.intervals" - mt_backchain_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.back_chain" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_sv.ini" diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 60db58ec..1dbe2911 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -9,35 +9,35 @@ include { MERGE_ANNOTATE_MT } from './mitochondria/me workflow ANALYSE_MT { take: - ch_bam // channel: [mandatory] [ val(meta), file(bam), file(bai) ] - ch_cadd_header // channel: [mandatory] [ path(txt) ] - ch_cadd_resources // channel: [mandatory] [ path(annotation) ] - ch_genome_bwa_index // channel: [mandatory] [ path(index) ] - ch_genome_bwamem2_index // channel: [mandatory] [ path(index) ] - ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ path(fai) ] - ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] - ch_mt_intervals // channel: [mandatory] [ path(interval_list) ] - ch_shift_mt_bwa_index // channel: [mandatory] [ path(index) ] - ch_shift_mt_bwamem2_index // channel: [mandatory] [ path(index) ] - ch_shift_mt_fasta // channel: [mandatory] [ path(fasta) ] - ch_shift_mt_dict // channel: [mandatory] [ path(dict) ] - ch_shift_mt_fai // channel: [mandatory] [ path(fai) ] - ch_shift_mt_intervals // channel: [mandatory] [ path(interval_list) ] - ch_shift_mt_backchain // channel: [mandatory] [ path(back_chain) ] - ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] - ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] - val_vep_genome // string: [mandatory] GRCh37 or GRCh38 - val_vep_cache_version // string: [mandatory] 107 - ch_vep_cache // channel: [mandatory] [ path(cache) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_bam_bai // channel: [mandatory] [ val(meta), file(bam), file(bai) ] + ch_cadd_header // channel: [mandatory] [ path(txt) ] + ch_cadd_resources // channel: [mandatory] [ path(annotation) ] + ch_genome_bwa_index // channel: [mandatory] [ val(meta), path(index) ] + ch_genome_bwamem2_index // channel: [mandatory] [ val(meta), path(index) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_mt_intervals // channel: [mandatory] [ path(interval_list) ] + ch_mtshift_bwaindex // channel: [mandatory] [ val(meta), path(index) ] + ch_mtshift_bwamem2index // channel: [mandatory] [ val(meta), path(index) ] + ch_mtshift_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_mtshift_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_mtshift_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_mtshift_intervals // channel: [mandatory] [ path(interval_list) ] + ch_mtshift_backchain // channel: [mandatory] [ val(meta), path(back_chain) ] + ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] + ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] + val_vep_genome // string: [mandatory] GRCh37 or GRCh38 + val_vep_cache_version // string: [mandatory] 107 + ch_vep_cache // channel: [mandatory] [ path(cache) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] main: ch_versions = Channel.empty() // PREPARING READS FOR MT ALIGNMENT CONVERT_MT_BAM_TO_FASTQ ( - ch_bam, + ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_genome_dict @@ -58,20 +58,20 @@ workflow ANALYSE_MT { ALIGN_AND_CALL_MT_SHIFT ( CONVERT_MT_BAM_TO_FASTQ.out.fastq, CONVERT_MT_BAM_TO_FASTQ.out.bam, - ch_shift_mt_bwa_index, - ch_shift_mt_bwamem2_index, - ch_shift_mt_fasta, - ch_shift_mt_dict, - ch_shift_mt_fai, - ch_shift_mt_intervals + ch_mtshift_bwaindex, + ch_mtshift_bwamem2index, + ch_mtshift_fasta, + ch_mtshift_dict, + ch_mtshift_fai, + ch_mtshift_intervals ) // LIFTOVER VCF FROM REFERENCE MT TO SHIFTED MT PICARD_LIFTOVERVCF ( ALIGN_AND_CALL_MT_SHIFT.out.vcf, ch_genome_dict, - ch_shift_mt_backchain, - ch_genome_fasta + ch_genome_fasta, + ch_mtshift_backchain, ) // MT MERGE AND ANNOTATE VARIANTS diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index d59baba5..f9a8fb47 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -101,28 +101,28 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(UNTAR_VEP_CACHE.out.versions) emit: - genome_bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] - genome_bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] - genome_chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] - genome_fai = ch_fai // channel: [ val(meta), path(fai) ] - genome_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] + genome_bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] + genome_bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] + genome_chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] + genome_fai = ch_fai // channel: [ val(meta), path(fai) ] + genome_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] - mt_intervals = GATK_SHIFTFASTA.out.intervals.collect() - mtshift_intervals = GATK_SHIFTFASTA.out.shift_intervals.collect() - mtshift_backchain = GATK_SHIFTFASTA.out.shift_back_chain.collect() - mtshift_fai = GATK_SHIFTFASTA.out.shift_fai.collect() // channel: [ val(meta), path(fai) ] - mtshift_fasta = GATK_SHIFTFASTA.out.shift_fa.collect() // channel: [ val(meta), path(fai) ] - mtshift_dict = GATK_SHIFTFASTA.out.dict.collect() // channel: [ path(dict) ] - mtshift_bwa_index = SENTIEON_BWAINDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] - mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] + mt_intervals = GATK_SHIFTFASTA.out.intervals.map{ meta, it -> it}.collect() // channel: [ path(intervals) ] + mtshift_intervals = GATK_SHIFTFASTA.out.shift_intervals.map{ meta, it -> it}.collect() // channel: [ path(intervals) ] + mtshift_backchain = GATK_SHIFTFASTA.out.shift_back_chain.collect() + mtshift_fai = GATK_SHIFTFASTA.out.shift_fai.collect() // channel: [ val(meta), path(fai) ] + mtshift_fasta = GATK_SHIFTFASTA.out.shift_fa.collect() // channel: [ val(meta), path(fai) ] + mtshift_dict = GATK_SHIFTFASTA.out.dict.collect() // channel: [ path(dict) ] + mtshift_bwa_index = SENTIEON_BWAINDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] + mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] - gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] - known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] - target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() // channel: [ val(meta), path(bed), path(tbi) ] - bait_intervals = CAT_CAT_BAIT.out.file_out.map{ meta, inter -> inter}.collect() // channel: [ path(intervals) ] - target_intervals = GATK_BILT.out.interval_list.map{ meta, inter -> inter}.collect() // channel: [ path(interval_list) ] - vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}.collect() // channel: [ path(cache) ] - versions = ch_versions // channel: [ path(versions.yml) ] + gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] + known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] + target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() // channel: [ val(meta), path(bed), path(tbi) ] + bait_intervals = CAT_CAT_BAIT.out.file_out.map{ meta, inter -> inter}.collect() // channel: [ path(intervals) ] + target_intervals = GATK_BILT.out.interval_list.map{ meta, inter -> inter}.collect() // channel: [ path(interval_list) ] + vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}.collect() // channel: [ path(cache) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 45e8491b..1e1b70e5 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -173,49 +173,92 @@ workflow RAREDISEASE { CHECK_INPUT (ch_input) ch_versions = ch_versions.mix(CHECK_INPUT.out.versions) - // Initialize all file channels including unprocessed vcf, bed and tab files - ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() + // Initialize file channels for PREPARE_REFERENCES subworkflow ch_genome_fasta = Channel.fromPath(params.fasta).map { it -> [[id:it[0].simpleName], it] }.collect() - ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true).collect() + ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() + : Channel.empty() + ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_mt_fasta = params.mt_fasta ? Channel.fromPath(params.mt_fasta).map { it -> [[id:it[0].simpleName], it] }.collect() + : Channel.empty() + ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() + : Channel.value([[],[]]) + ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache).map { it -> [[id:'vep_cache'], it] }.collect() + : Channel.value([[],[]]) + + // Prepare references and indices. + PREPARE_REFERENCES ( + ch_genome_fasta, + ch_genome_fai, + ch_mt_fasta, + ch_gnomad_af_tab, + ch_dbsnp, + ch_target_bed_unprocessed, + ch_vep_cache_unprocessed + ) + .set { ch_references } + + // Gather built indices or get them from the params + ch_bait_intervals = ch_references.bait_intervals + ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() : Channel.value([]) ch_call_interval = params.call_interval ? Channel.fromPath(params.call_interval).collect() : Channel.value([]) - ch_genome_fai = params.fai ? Channel.fromPath(params.fai).map {it -> [[id:it[0].simpleName], it]}.collect() - : Channel.value([]) - ch_gnomad_af_tab = params.gnomad_af ? Channel.fromPath(params.gnomad_af).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([[],[]]) + ch_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.known_dbsnp_tbi.ifEmpty([[],[]]) + ch_genome_bwaindex = params.bwa ? Channel.fromPath(params.bwa).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.genome_bwa_index + ch_genome_bwamem2index = params.bwamem2 ? Channel.fromPath(params.bwamem2).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.genome_bwamem2_index + ch_genome_chrsizes = ch_references.genome_chrom_sizes + ch_genome_fai = ch_references.genome_fai + ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() + : ch_references.genome_dict + ch_gnomad_afidx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() + : ch_references.gnomad_af_idx + ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_gnomad_afidx).map {meta, tab, idx -> [tab,idx]}.collect() + : Channel.empty() ch_intervals_wgs = params.intervals_wgs ? Channel.fromPath(params.intervals_wgs).collect() : Channel.empty() ch_intervals_y = params.intervals_y ? Channel.fromPath(params.intervals_y).collect() : Channel.empty() - ch_known_dbsnp = params.known_dbsnp ? Channel.fromPath(params.known_dbsnp).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([[],[]]) ch_ml_model = params.variant_caller.equals("sentieon") ? Channel.fromPath(params.ml_model).collect() : Channel.value([]) - ch_mt_fasta = params.mt_fasta ? Channel.fromPath(params.mt_fasta).map { it -> [[id:it[0].simpleName], it] }.collect() - : Channel.empty() + ch_mt_intervals = ch_references.mt_intervals + ch_mtshift_backchain = ch_references.mtshift_backchain + ch_mtshift_bwaindex = ch_references.mtshift_bwa_index + ch_mtshift_bwamem2index = ch_references.mtshift_bwamem2_index + ch_mtshift_dictionary = ch_references.mtshift_dict + ch_mtshift_fai = ch_references.mtshift_fai + ch_mtshift_fasta = ch_references.mtshift_fasta + ch_mtshift_intervals = ch_references.mtshift_intervals ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() : Channel.value([]) ch_score_config_sv = params.score_config_sv ? Channel.fromPath(params.score_config_sv).collect() : Channel.value([]) - ch_target_bed_unprocessed = params.target_bed ? Channel.fromPath(params.target_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([[],[]]) + ch_target_bed = ch_references.target_bed + ch_target_intervals = ch_references.target_intervals ch_variant_catalog = params.variant_catalog ? Channel.fromPath(params.variant_catalog).map { it -> [[id:it[0].simpleName],it]}.collect() : Channel.value([[],[]]) + ch_variant_consequences = Channel.fromPath("$projectDir/assets/variant_consequences_v1.txt", checkIfExists: true).collect() ch_vcfanno_resources = params.vcfanno_resources ? Channel.fromPath(params.vcfanno_resources).splitText().map{it -> it.trim()}.collect() : Channel.value([]) ch_vcfanno_lua = params.vcfanno_lua ? Channel.fromPath(params.vcfanno_lua).collect() : Channel.value([]) ch_vcfanno_toml = params.vcfanno_toml ? Channel.fromPath(params.vcfanno_toml).collect() : Channel.value([]) - ch_vep_cache_unprocessed = params.vep_cache ? Channel.fromPath(params.vep_cache).map { it -> [[id:'vep_cache'], it] }.collect() - : Channel.value([[],[]]) + ch_vep_cache = ( params.vep_cache && params.vep_cache.endsWith("tar.gz") ) ? ch_references.vep_resources + : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) ch_vep_filters = params.vep_filters ? Channel.fromPath(params.vep_filters).collect() : Channel.value([]) + ch_versions = ch_versions.mix(ch_references.versions) + // Generate pedigree file ch_pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } @@ -224,56 +267,6 @@ workflow RAREDISEASE { FASTQC (CHECK_INPUT.out.reads) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - // Prepare references and indices. - PREPARE_REFERENCES ( - ch_genome_fasta, - ch_genome_fai, - ch_mt_fasta, - ch_gnomad_af_tab, - ch_known_dbsnp, - ch_target_bed_unprocessed, - ch_vep_cache_unprocessed - ) - .set { ch_references } - - // Gather built indices or get them from the params - ch_bait_intervals = ch_references.bait_intervals - ch_bwa_index = params.bwa ? Channel.fromPath(params.bwa).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.bwa_index - ch_bwa_index_mt_shift = params.mt_bwa_index_shift ? Channel.fromPath(params.mt_bwa_index_shift).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.bwa_index_mt_shift - ch_bwamem2_index = params.bwamem2 ? Channel.fromPath(params.bwamem2).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.bwamem2_index - ch_bwamem2_index_mt_shift = params.mt_bwamem2_index_shift ? Channel.fromPath(params.mt_bwamem2_index_shift).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.bwamem2_index_mt_shift - ch_chrom_sizes = ch_references.chrom_sizes - ch_mt_backchain_shift = params.mt_backchain_shift ? Channel.fromPath(params.mt_backchain_shift).map{ it -> [[id:it[0].simpleName], it] }.collect() - : Channel.value([]) - ch_mt_fasta_shift = params.mt_fasta_shift ? Channel.fromPath(params.mt_fasta_shift).map { it -> [[id:it[0].simpleName], it] }.collect() - : Channel.empty() - ch_mt_intervals = params.mt_intervals ? Channel.fromPath(params.mt_intervals).collect() - : Channel.value([]) - ch_mt_intervals_shift = params.mt_intervals_shift ? Channel.fromPath(params.mt_intervals_shift).collect() - : Channel.value([]) - ch_mt_shift_fai = params.mt_fai_shift ? Channel.fromPath(params.mt_fai_shift).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.fai_mt_shift - ch_genome_fai = ch_references.fai - ch_gnomad_af_idx = params.gnomad_af_idx ? Channel.fromPath(params.gnomad_af_idx).collect() - : ch_references.gnomad_af_idx - ch_gnomad_af = params.gnomad_af ? ch_gnomad_af_tab.join(ch_gnomad_af_idx).map {meta, tab, idx -> [tab,idx]}.collect() - : Channel.empty() - ch_known_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.known_dbsnp_tbi.ifEmpty([[],[]]) - ch_genome_dictionary = params.sequence_dictionary ? Channel.fromPath(params.sequence_dictionary).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.sequence_dict - ch_sequence_dictionary_mt_shift = params.mt_sequence_dictionary_shift ? Channel.fromPath(params.mt_sequence_dictionary_shift).map {it -> [[id:it[0].simpleName], it]}.collect() - : ch_references.sequence_dict_mt_shift - ch_target_bed = ch_references.target_bed - ch_target_intervals = ch_references.target_intervals - ch_vep_cache = ( params.vep_cache && params.vep_cache.endsWith("tar.gz") ) ? ch_references.vep_resources - : ( params.vep_cache ? Channel.fromPath(params.vep_cache).collect() : Channel.value([]) ) - ch_versions = ch_versions.mix(ch_references.versions) - // CREATE CHROMOSOME BED AND INTERVALS SCATTER_GENOME ( ch_genome_dictionary, @@ -289,10 +282,10 @@ workflow RAREDISEASE { CHECK_INPUT.out.reads, ch_genome_fasta, ch_genome_fai, - ch_bwa_index, - ch_bwamem2_index, - ch_known_dbsnp, - ch_known_dbsnp_tbi, + ch_genome_bwaindex, + ch_genome_bwamem2index, + ch_dbsnp, + ch_dbsnp_tbi, params.platform ) .set { ch_mapped } @@ -307,7 +300,7 @@ workflow RAREDISEASE { ch_genome_fai, ch_bait_intervals, ch_target_intervals, - ch_chrom_sizes, + ch_genome_chrsizes, ch_intervals_wgs, ch_intervals_y ) @@ -349,8 +342,8 @@ workflow RAREDISEASE { ch_mapped.bam_bai, ch_genome_fasta, ch_genome_fai, - ch_known_dbsnp, - ch_known_dbsnp_tbi, + ch_dbsnp, + ch_dbsnp_tbi, ch_call_interval, ch_ml_model, CHECK_INPUT.out.case_info @@ -361,7 +354,7 @@ workflow RAREDISEASE { ch_mapped.marked_bam, ch_mapped.marked_bai, ch_mapped.bam_bai, - ch_bwa_index, + ch_genome_bwaindex, ch_genome_fasta, ch_genome_fai, CHECK_INPUT.out.case_info, @@ -431,19 +424,19 @@ workflow RAREDISEASE { ch_mapped.bam_bai, ch_cadd_header, ch_cadd_resources, - ch_bwa_index, - ch_bwamem2_index, + ch_genome_bwaindex, + ch_genome_bwamem2index, ch_genome_fasta, ch_genome_fai, ch_genome_dictionary, ch_mt_intervals, - ch_bwa_index_mt_shift, - ch_bwamem2_index_mt_shift, - ch_mt_fasta_shift, - ch_sequence_dictionary_mt_shift, - ch_mt_shift_fai, - ch_mt_intervals_shift, - ch_mt_backchain_shift, + ch_mtshift_bwaindex, + ch_mtshift_bwamem2index, + ch_mtshift_fasta, + ch_mtshift_dictionary, + ch_mtshift_fai, + ch_mtshift_intervals, + ch_mtshift_backchain, ch_vcfanno_resources, ch_vcfanno_toml, params.genome, From fd79ab76593604549ba4cf7e754d079b7dbbfdf7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 May 2023 10:49:42 +0200 Subject: [PATCH 059/136] update input channel definitions --- .../local/mitochondria/align_and_call_MT.nf | 22 +++++++++---------- .../mitochondria/convert_mt_bam_to_fastq.nf | 10 ++++----- .../local/mitochondria/merge_annotate_MT.nf | 4 ++-- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 3d992322..7121168c 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -16,21 +16,21 @@ include { TABIX_TABIX as TABIX_TABIX_MT } fr workflow ALIGN_AND_CALL_MT { take: - ch_fastq // channel: [mandatory] [ val(meta), [ path(reads) ] ] - ch_ubam // channel: [mandatory] [ val(meta), path(bam) ] - ch_index_bwa // channel: [mandatory for sentieon] [ val(meta), path(index) ] - ch_index_bwamem2 // channel: [mandatory for bwamem2] [ val(meta), path(index) ] - ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_dict // channel: [mandatory] [ val(meta), path(dict) ] - ch_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_intervals_mt // channel: [mandatory] [ path(interval_list) ] + ch_fastq // channel: [mandatory] [ val(meta), [ path(reads) ] ] + ch_ubam // channel: [mandatory] [ val(meta), path(bam) ] + ch_bwaindex // channel: [mandatory for sentieon] [ val(meta), path(index) ] + ch_bwamem2index // channel: [mandatory for bwamem2] [ val(meta), path(index) ] + ch_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_intervals // channel: [mandatory] [ path(interval_list) ] main: ch_versions = Channel.empty() - BWAMEM2_MEM_MT (ch_fastq , ch_index_bwamem2, true) + BWAMEM2_MEM_MT (ch_fastq , ch_bwamem2index, true) - SENTIEON_BWAMEM_MT ( ch_fastq, ch_fasta, ch_fai, ch_index_bwa ) + SENTIEON_BWAMEM_MT ( ch_fastq, ch_fasta, ch_fai, ch_bwaindex ) ch_mt_bam = Channel.empty().mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam) ch_fastq_ubam = ch_mt_bam.join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) @@ -45,7 +45,7 @@ workflow ALIGN_AND_CALL_MT { SAMTOOLS_INDEX_MT(SAMTOOLS_SORT_MT.out.bam) ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, failOnMismatch:true, failOnDuplicate:true) - ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(ch_intervals_mt) + ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(ch_intervals) GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) diff --git a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf index 2df4406f..156f71bb 100644 --- a/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf +++ b/subworkflows/local/mitochondria/convert_mt_bam_to_fastq.nf @@ -8,16 +8,16 @@ include { GATK4_SAMTOFASTQ as GATK4_SAMTOFASTQ_MT } from '../../../modules/nf-co workflow CONVERT_MT_BAM_TO_FASTQ { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_genome_fasta_meta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] main: ch_versions = Channel.empty() // Outputs bam containing only MT - GATK4_PRINTREADS_MT ( ch_bam, ch_genome_fasta_meta, ch_genome_fai, ch_genome_dict ) + GATK4_PRINTREADS_MT ( ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_genome_dict ) // Removes alignment information GATK4_REVERTSAM_MT ( GATK4_PRINTREADS_MT.out.bam ) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index 8d4f3da0..46e334f0 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -23,9 +23,9 @@ workflow MERGE_ANNOTATE_MT { ch_vcf2 // channel: [mandatory] [ val(meta), path(vcf) ] ch_cadd_header // channel: [mandatory] [ path(txt) ] ch_cadd_resources // channel: [mandatory] [ path(annotation) ] - ch_genome_fasta // channel: [mandatory] [ path(fasta) ] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_genome_dict // channel: [mandatory] [ val(meta), path(dict) ] - ch_genome_fai // channel: [mandatory] [ path(fai) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] ch_vcfanno_resources // channel: [mandatory] [ path(resources) ] ch_vcfanno_toml // channel: [mandatory] [ path(toml) ] val_vep_genome // string: [mandatory] GRCh37 or GRCh38 From 743c35bb24f801cd2573235e1784401403bf40f4 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 May 2023 10:56:08 +0200 Subject: [PATCH 060/136] update docs --- CHANGELOG.md | 7 +++++++ docs/usage.md | 22 ++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23a719c8..cf89d03d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## v2.0.0 - [] + +### `Added` + +- GATK's ShiftFasta to generate all the files required for mitochondrial variant calling +- Feature to calculate CADD scores for indels + ## v1.0.0 - [2023-03-31] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. diff --git a/docs/usage.md b/docs/usage.md index 482ed179..5dd5761a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -219,20 +219,14 @@ The mandatory and optional parameters for each category are tabulated below. ##### 8. Mitochondrial analysis -| Mandatory | Optional | -| ------------------------------ | -------- | -| genome | | -| mt_backchain_shift1 | | -| mito_name | | -| mt_fasta_shift | | -| mt_intervals | | -| mt_intervals_shift | | -| vcfanno_resources | | -| vcfanno_toml | | -| vep_cache_version | | -| vep_cache | | - -1Can be generated by GATK's [ShiftFasta](https://gatk.broadinstitute.org/hc/en-us/articles/9570501436827-ShiftFasta-BETA-). Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/mt_shift8000.back_chain). +| Mandatory | Optional | +| ----------------- | -------- | +| genome | | +| mito_name | | +| vcfanno_resources | | +| vcfanno_toml | | +| vep_cache_version | | +| vep_cache | | #### Run the pipeline From f0f866d0d8d10f29e92b947fb85996cd55520dc3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 May 2023 10:58:53 +0200 Subject: [PATCH 061/136] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf89d03d..55291bfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` -- GATK's ShiftFasta to generate all the files required for mitochondrial variant calling +- GATK's ShiftFasta to generate all the files required for mitochondrial analysis - Feature to calculate CADD scores for indels ## v1.0.0 - [2023-03-31] From c0a869e9b629935d9cc492864053ac0f210301ab Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 26 May 2023 11:27:13 +0200 Subject: [PATCH 062/136] fix lint --- modules.json | 278 +++++++++++++-------------------------------------- 1 file changed, 70 insertions(+), 208 deletions(-) diff --git a/modules.json b/modules.json index 0622ed2e..5b778895 100644 --- a/modules.json +++ b/modules.json @@ -8,488 +8,350 @@ "bcftools/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwa/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cadd": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "deepvariant": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/models": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/score": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "glnexus": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplocheck": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "manta/germline": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "peddy": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "0ce3ab0ac301f160225b22254fa238478b4389f2", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "bf8ff98531167f8245ba5c44ce7d781503ddf936", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stranger": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "svdb/query": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "01b3b2509d76625b6d6cd613b349fb4777712a15", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "untar": { "branch": "master", "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } } } } -} \ No newline at end of file +} From ed6b2f51af82e0f0a9a986098cd79d757d614256 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Fri, 26 May 2023 14:42:20 +0200 Subject: [PATCH 063/136] fix renamed local module --- modules/local/{mt_deletion_scritp.nf => mt_deletion_script.nf} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename modules/local/{mt_deletion_scritp.nf => mt_deletion_script.nf} (100%) diff --git a/modules/local/mt_deletion_scritp.nf b/modules/local/mt_deletion_script.nf similarity index 100% rename from modules/local/mt_deletion_scritp.nf rename to modules/local/mt_deletion_script.nf From 4b6b9eac055a2d37250e12c477e8996cea4aa099 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Sat, 27 May 2023 23:06:31 +0200 Subject: [PATCH 064/136] update conf --- conf/modules/prepare_references.config | 16 +++--- .../local/mitochondria/align_and_call_MT.nf | 10 ++-- subworkflows/local/prepare_references.nf | 51 +++++++++++-------- 3 files changed, 44 insertions(+), 33 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index af73549a..a825250c 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -29,16 +29,16 @@ process { ext.when = {!params.bwamem2 && params.aligner == "bwamem2"} } - withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_SHIFT_MT' { - ext.when = {!params.mt_bwamem2_index_shift && params.mt_fasta_shift && !(params.analysis_type == "wes") && params.aligner == "bwamem2"} + withName: '.*PREPARE_REFERENCES:BWAMEM2_INDEX_MT_SHIFT' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "bwamem2"} } withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_GENOME' { ext.when = {!params.bwa && params.aligner == "sentieon"} } - withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_SHIFT_MT' { - ext.when = {!params.mt_bwa_index_shift && params.mt_fasta_shift && !(params.analysis_type == "wes") && params.aligner == "sentieon"} + withName: '.*PREPARE_REFERENCES:SENTIEON_BWAINDEX_MT_SHIFT' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes") && params.aligner == "sentieon"} } withName: '.*PREPARE_REFERENCES:BWA_INDEX_GENOME' { @@ -54,8 +54,8 @@ process { ext.when = {!params.mt_fasta && !params.skip_mt_analysis} } - withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_SHIFT_MT' { - ext.when = {!params.mt_fai_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} + withName: '.*PREPARE_REFERENCES:SAMTOOLS_FAIDX_MT_SHIFT' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes")} } withName: '.*PREPARE_REFERENCES:GATK_SD' { @@ -66,8 +66,8 @@ process { ext.args = { "--interval-file-name ${meta.id}_mt" } } - withName: '.*PREPARE_REFERENCES:GATK_SD_SHIFT_MT' { - ext.when = {!params.mt_sequence_dictionary_shift && params.mt_fasta_shift && !(params.analysis_type == "wes")} + withName: '.*PREPARE_REFERENCES:GATK_SD_MT_SHIFT' { + ext.when = { !params.skip_mt_analysis && !(params.analysis_type == "wes")} } withName: '.*PREPARE_REFERENCES:GET_CHROM_SIZES' { diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 7121168c..dc629d84 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -28,14 +28,16 @@ workflow ALIGN_AND_CALL_MT { main: ch_versions = Channel.empty() - BWAMEM2_MEM_MT (ch_fastq , ch_bwamem2index, true) + BWAMEM2_MEM_MT (ch_fastq, ch_bwamem2index, true) SENTIEON_BWAMEM_MT ( ch_fastq, ch_fasta, ch_fai, ch_bwaindex ) - ch_mt_bam = Channel.empty().mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam) - ch_fastq_ubam = ch_mt_bam.join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) + Channel.empty() + .mix(BWAMEM2_MEM_MT.out.bam, SENTIEON_BWAMEM_MT.out.bam) + .join(ch_ubam, failOnMismatch:true, failOnDuplicate:true) + .set {ch_bam_ubam} - GATK4_MERGEBAMALIGNMENT_MT (ch_fastq_ubam, ch_fasta, ch_dict) + GATK4_MERGEBAMALIGNMENT_MT (ch_bam_ubam, ch_fasta, ch_dict) PICARD_ADDORREPLACEREADGROUPS_MT (GATK4_MERGEBAMALIGNMENT_MT.out.bam) diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index f9a8fb47..54160fdc 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -57,11 +57,20 @@ workflow PREPARE_REFERENCES { GATK_SHIFTFASTA(ch_mt_fasta_in, SAMTOOLS_FAIDX_MT_SHIFT.out.fai, GATK_SD_MT_SHIFT.out.dict) BWAMEM2_INDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) SENTIEON_BWAINDEX_MT_SHIFT(GATK_SHIFTFASTA.out.shift_fa) + GATK_SHIFTFASTA.out.intervals + .multiMap{ meta, files -> + shift_intervals: + ind = files.findIndexValues {it.toString().endsWith("shifted.intervals")} + files[ind] + intervals: + ind = files.findIndexValues {!(it.toString().endsWith("shifted.intervals"))} + files[ind] + } + .set {ch_shiftfasta_mtintervals} // Vcf, tab and bed indices TABIX_DBSNP(ch_known_dbsnp) ch_versions = ch_versions.mix(TABIX_DBSNP.out.versions) - TABIX_GNOMAD_AF(ch_gnomad_af_tab) TABIX_PT(ch_target_bed).tbi.set { ch_tbi } TABIX_PBT(ch_target_bed).gz_tbi.set { ch_bgzip_tbi } @@ -101,28 +110,28 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(UNTAR_VEP_CACHE.out.versions) emit: - genome_bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] - genome_bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] - genome_chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] - genome_fai = ch_fai // channel: [ val(meta), path(fai) ] - genome_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] + genome_bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] + genome_bwamem2_index = BWAMEM2_INDEX_GENOME.out.index.collect() // channel: [ val(meta), path(index) ] + genome_chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] + genome_fai = ch_fai // channel: [ val(meta), path(fai) ] + genome_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] - mt_intervals = GATK_SHIFTFASTA.out.intervals.map{ meta, it -> it}.collect() // channel: [ path(intervals) ] - mtshift_intervals = GATK_SHIFTFASTA.out.shift_intervals.map{ meta, it -> it}.collect() // channel: [ path(intervals) ] - mtshift_backchain = GATK_SHIFTFASTA.out.shift_back_chain.collect() - mtshift_fai = GATK_SHIFTFASTA.out.shift_fai.collect() // channel: [ val(meta), path(fai) ] - mtshift_fasta = GATK_SHIFTFASTA.out.shift_fa.collect() // channel: [ val(meta), path(fai) ] - mtshift_dict = GATK_SHIFTFASTA.out.dict.collect() // channel: [ path(dict) ] - mtshift_bwa_index = SENTIEON_BWAINDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] - mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] + mt_intervals = ch_shiftfasta_mtintervals.intervals.collect() // channel: [ path(intervals) ] + mtshift_intervals = ch_shiftfasta_mtintervals.shift_intervals.collect() // channel: [ path(intervals) ] + mtshift_backchain = GATK_SHIFTFASTA.out.shift_back_chain.collect() // channel: [ val(meta), path(backchain) ] + mtshift_fai = GATK_SHIFTFASTA.out.shift_fai.collect() // channel: [ val(meta), path(fai) ] + mtshift_fasta = GATK_SHIFTFASTA.out.shift_fa.collect() // channel: [ val(meta), path(fai) ] + mtshift_dict = GATK_SHIFTFASTA.out.dict.collect() // channel: [ path(dict) ] + mtshift_bwa_index = SENTIEON_BWAINDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] + mtshift_bwamem2_index = BWAMEM2_INDEX_MT_SHIFT.out.index.collect() // channel: [ val(meta), path(index) ] - gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] - known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] - target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() // channel: [ val(meta), path(bed), path(tbi) ] - bait_intervals = CAT_CAT_BAIT.out.file_out.map{ meta, inter -> inter}.collect() // channel: [ path(intervals) ] - target_intervals = GATK_BILT.out.interval_list.map{ meta, inter -> inter}.collect() // channel: [ path(interval_list) ] - vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}.collect() // channel: [ path(cache) ] - versions = ch_versions // channel: [ path(versions.yml) ] + gnomad_af_idx = TABIX_GNOMAD_AF.out.tbi.collect() // channel: [ val(meta), path(fasta) ] + known_dbsnp_tbi = TABIX_DBSNP.out.tbi.collect() // channel: [ val(meta), path(fasta) ] + target_bed = Channel.empty().mix(ch_tbi, ch_bgzip_tbi).collect() // channel: [ val(meta), path(bed), path(tbi) ] + bait_intervals = CAT_CAT_BAIT.out.file_out.map{ meta, inter -> inter}.collect() // channel: [ path(intervals) ] + target_intervals = GATK_BILT.out.interval_list.map{ meta, inter -> inter}.collect() // channel: [ path(interval_list) ] + vep_resources = UNTAR_VEP_CACHE.out.untar.map{meta, files -> [files]}.collect() // channel: [ path(cache) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 48af7d5167ac0ab8b632a59df50673e9cf167c1a Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 29 May 2023 10:39:51 +0200 Subject: [PATCH 065/136] update faidx --- modules.json | 2 +- modules/nf-core/samtools/faidx/main.nf | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 5b778895..a061424c 100644 --- a/modules.json +++ b/modules.json @@ -267,7 +267,7 @@ }, "samtools/faidx": { "branch": "master", - "git_sha": "bf8ff98531167f8245ba5c44ce7d781503ddf936", + "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe", "installed_by": ["modules"] }, "samtools/index": { diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index c1e8ef3a..59ed3088 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -35,8 +35,12 @@ process SAMTOOLS_FAIDX { """ stub: + def match = (task.ext.args =~ /-o(?:utput)?\s(.*)\s?/).findAll() + def fastacmd = match[0] ? "touch ${match[0][1]}" : '' """ + ${fastacmd} touch ${fasta}.fai + cat <<-END_VERSIONS > versions.yml "${task.process}": From 7fa38f20b9be25546d0a52d2914d0ade1b2fdb6d Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Mon, 29 May 2023 11:07:36 +0200 Subject: [PATCH 066/136] feat add documentation --- docs/output.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/output.md b/docs/output.md index 5c890d9c..5c15aa71 100644 --- a/docs/output.md +++ b/docs/output.md @@ -47,10 +47,12 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [VEP](#vep-1) - [Mitochondrial analysis](#mitochondrial-analysis) - [Alignment and variant calling](#alignment-and-variant-calling) + - [MT deletion script](#mt-deletion-script) - [Annotation:](#annotation-) - [HaploGrep2](#haplogrep2) - [vcfanno](#vcfanno-1) - [VEP](#vep-2) + - [HmtNote](#hmtnote) - [Rank variants and filtering](#rank-variants-and-filtering) - [GENMOD](#genmod) - [Pipeline information](#pipeline-information) @@ -360,6 +362,10 @@ Mitochondrial analysis is run by default, to turn it off set `--skip_mt_analysis The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sensitivity to low AF and separate alignments using opposite genome breakpoints to allow for the tracing of lineages of rare mitochondrial variants. +##### MT deletion script + +[MT deletion script](https://github.com/dnil/mitosign/blob/master/run_mt_del_check.sh) lists the fraction of mitochondrially aligning read pairs (per 1000) that appear discordant, as defined by an insert size of more than 1.2 kb (and less than 15 kb due to the circular nature of the genome) using samtools. + #### Annotation: ##### HaploGrep2 @@ -384,6 +390,10 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files [CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder by default, and is passed to VEP for further annotation. +##### Hmtnote + +[HmtNote](https://github.com/robertopreste/HmtNote) annotates vcf containing human mitochondrial variants with HmtVar. It will run offline by default wiht a database within the container. + ##### VEP [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) determines the effect of your variants on genes, transcripts, and protein sequence, as well as regulatory regions. From 50c6947b4df6b2412c6d87c15bad8ecb59556395 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Mon, 29 May 2023 16:51:06 +0200 Subject: [PATCH 067/136] feat output mt_del_res --- conf/modules/align_and_call_MT.config | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config index 352314e5..7e0a33f4 100644 --- a/conf/modules/align_and_call_MT.config +++ b/conf/modules/align_and_call_MT.config @@ -59,6 +59,14 @@ process { ext.args = '-s --insert-size 16000' } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:MT_DELETION' { + publishDir = [ + path: { "${params.outdir}/mt_sv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:GATK4_MUTECT2_MT' { ext.args = '--mitochondria-mode TRUE' } From 3001a24c86b64be9e5ae9933f060f52a2f9b2a4a Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Mon, 29 May 2023 17:43:40 +0200 Subject: [PATCH 068/136] feat made samtools stats and mt_del_script into one local module --- conf/modules/align_and_call_MT.config | 5 +---- modules/local/mt_deletion_script.nf | 13 +++++++++---- .../local/mitochondria/align_and_call_MT.nf | 6 +----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/conf/modules/align_and_call_MT.config b/conf/modules/align_and_call_MT.config index 8158ac5e..1a2993f5 100644 --- a/conf/modules/align_and_call_MT.config +++ b/conf/modules/align_and_call_MT.config @@ -52,11 +52,8 @@ process { ext.prefix = { "${meta.id}_sorted" } } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:SAMTOOLS_STATS_MT' { - ext.args = '-s --insert-size 16000' - } - withName: '.*ANALYSE_MT:ALIGN_AND_CALL_MT:MT_DELETION' { + ext.args = '-s --insert-size 16000' publishDir = [ path: { "${params.outdir}/mt_sv" }, mode: params.publish_dir_mode, diff --git a/modules/local/mt_deletion_script.nf b/modules/local/mt_deletion_script.nf index 9168b661..df586191 100644 --- a/modules/local/mt_deletion_script.nf +++ b/modules/local/mt_deletion_script.nf @@ -8,7 +8,8 @@ process MT_DELETION { 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" input: - tuple val(meta), path(stats) + tuple val(meta), path(input), path(input_index) + tuple val(meta2), path(fasta) output: tuple val(meta), path('*.txt'), emit: mt_del_result @@ -18,15 +19,19 @@ process MT_DELETION { 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}" : "" """ - grep -E ^IS $stats | awk 'BEGIN {sum=0} (\$2>=1200 && \$2<=15000) {sum=sum+\$3} (\$2<1200 || \$2>15000) {sum_norm=sum_norm+\$3} END \\ + samtools stats --threads ${task.cpus} $args ${reference} ${input} | \\ + grep -E ^IS | \\ + awk 'BEGIN {sum=0} (\$2>=1200 && \$2<=15000) {sum=sum+\$3} (\$2<1200 || \$2>15000) {sum_norm=sum_norm+\$3} END \\ {print "intermediate discordant ", sum, "normal ", sum_norm, "ratio ppk", sum*1000/(sum_norm+sum)}' 1> ${prefix}.txt cat <<-END_VERSIONS > versions.yml "${task.process}": - mt_del: v1.0 + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ @@ -37,7 +42,7 @@ process MT_DELETION { cat <<-END_VERSIONS > versions.yml "${task.process}": - mt_del: v1.0 + samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//') END_VERSIONS """ } diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 40968c7e..a913c1ee 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -13,7 +13,6 @@ include { HAPLOCHECK as HAPLOCHECK_MT } fr include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } from '../../../modules/nf-core/gatk4/mutect2/main' include { GATK4_FILTERMUTECTCALLS as GATK4_FILTERMUTECTCALLS_MT } from '../../../modules/nf-core/gatk4/filtermutectcalls/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' -include { SAMTOOLS_STATS as SAMTOOLS_STATS_MT } from '../../../modules/nf-core/samtools/stats/main' include { MT_DELETION } from '../../../modules/local/mt_deletion_script' workflow ALIGN_AND_CALL_MT { @@ -51,9 +50,7 @@ workflow ALIGN_AND_CALL_MT { ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, failOnMismatch:true, failOnDuplicate:true) ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(ch_intervals) - SAMTOOLS_STATS_MT(ch_sort_index_bam, ch_fasta) - - MT_DELETION(SAMTOOLS_STATS_MT.out.stats) + MT_DELETION(ch_sort_index_bam, ch_fasta) GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) @@ -75,7 +72,6 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) - ch_versions = ch_versions.mix(SAMTOOLS_STATS_MT.out.versions.first()) ch_versions = ch_versions.mix(MT_DELETION.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) From b741e6d42830084f3caad1eb91dd64ff17de964d Mon Sep 17 00:00:00 2001 From: EmmaCAndersson Date: Tue, 30 May 2023 10:41:15 +0200 Subject: [PATCH 069/136] added check for case id --- bin/check_samplesheet.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 041b4e58..16a8ee05 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -35,6 +35,7 @@ def __init__( first_col="fastq_1", second_col="fastq_2", single_col="single_end", + case_id_col="case_id" **kwargs, ): """ @@ -50,6 +51,8 @@ def __init__( single_col (str): The name of the new column that will be inserted and records whether the sample contains single- or paired-end sequencing reads (default "single_end"). + case_id_col (str): The name of the column that contains the case_id + (default "case_id"). """ super().__init__(**kwargs) @@ -57,6 +60,7 @@ def __init__( self._first_col = first_col self._second_col = second_col self._single_col = single_col + self._case_id_col = case_id_col self._seen = set() self.modified = [] @@ -73,6 +77,7 @@ def validate_and_transform(self, row): self._validate_first(row) self._validate_second(row) self._validate_pair(row) + self._validate_case_id(row) self._seen.add((row[self._sample_col], row[self._first_col])) self.modified.append(row) @@ -105,6 +110,13 @@ def _validate_pair(self, row): else: row[self._single_col] = True + def _validate_case_id(self, row): + """Assert that the case id exists and convert spaces to underscores.""" + if len(row[self._case_id_col]) <= 0: + raise AssertionError("Case ID input is required.") + # Sanitize id slightly. + row[self._case_id_col] = row[self._case_id_col].replace(" ", "_") + def _validate_fastq_format(self, filename): """Assert that a given filename has one of the expected FASTQ extensions.""" if not any(filename.endswith(extension) for extension in self.VALID_FORMATS): From c5d9545ec12cc4137e1e7217b1ac5b53032a1b02 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Tue, 30 May 2023 12:10:01 +0200 Subject: [PATCH 070/136] feat added changes to CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55291bfa..76138676 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,3 +26,5 @@ Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co - SV annotation with SVDB query and vep - Separate workflow for analysing and annotating mitochondrial variants - Call copy number variants in the SMN gene using SMNCopyNumberCaller +- HmtNote to annotate mitochondria +- MT del script to detect mitochondrial deltions From 12c6095b3958c4b09c61d5492721650c6f09d956 Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Tue, 30 May 2023 13:25:41 +0200 Subject: [PATCH 071/136] fix chanellog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76138676..d2f69d89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - GATK's ShiftFasta to generate all the files required for mitochondrial analysis - Feature to calculate CADD scores for indels +- HmtNote to annotate mitochondria +- MT del script to detect mitochondrial deltions ## v1.0.0 - [2023-03-31] @@ -26,5 +28,3 @@ Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co - SV annotation with SVDB query and vep - Separate workflow for analysing and annotating mitochondrial variants - Call copy number variants in the SMN gene using SMNCopyNumberCaller -- HmtNote to annotate mitochondria -- MT del script to detect mitochondrial deltions From 203d9f82af9b24d281392d314c9851c2c4893f9d Mon Sep 17 00:00:00 2001 From: "lucia.pena.perez@scilifelab.se" Date: Tue, 30 May 2023 14:08:19 +0200 Subject: [PATCH 072/136] Retry the test From c98ae7effc700fe854b05e898a81349482fd1465 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Jun 2023 19:26:19 +0200 Subject: [PATCH 073/136] bumpversion --- CHANGELOG.md | 2 ++ README.md | 3 ++- nextflow.config | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7e7df70..198bdcab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## v2.0.0 - [xxxx-xx-xx] + ## v1.0.0 - [2023-06-01] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. diff --git a/README.md b/README.md index 22a4ab00..d8caf097 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,8 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - + +If you use nf-core/raredisease for your analysis, please cite it using the following doi: [10.5281/zenodo.7995798](https://doi.org/10.5281/zenodo.7995798) An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/nextflow.config b/nextflow.config index a653f2e8..aa5a825b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -263,7 +263,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=22.10.1' - version = '1.0.0' + version = '2.0.0dev' doi = '' } From d6931c3aa193c18832f93c7450b4a6612d140b62 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 1 Jun 2023 19:35:49 +0200 Subject: [PATCH 074/136] fix spacing --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index aa5a825b..fa53fa3b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -263,7 +263,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=22.10.1' - version = '2.0.0dev' + version = '2.0.0dev' doi = '' } From 1c7857e447711f27939771b0da1dcaf14123cf42 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Jun 2023 00:03:41 +0200 Subject: [PATCH 075/136] Update CHANGELOG.md [skip ci] --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47a13883..3de32419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v2.0.0 - [xxxx-xx-xx] +## v1.1.0 - [xxxx-xx-xx] ## v1.0.0 - [2023-06-01] From 3b7915694f6827fa15124b116c0c0d6f77ef02e7 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Jun 2023 00:04:31 +0200 Subject: [PATCH 076/136] Update nextflow.config --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index fa53fa3b..bd21861f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -263,7 +263,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=22.10.1' - version = '2.0.0dev' + version = '1.1.0dev' doi = '' } From 3c56322a05e84e94781bfb9839f5be9f72a6133d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Jun 2023 09:06:48 +0200 Subject: [PATCH 077/136] update doi --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 22a4ab00..2062503e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # ![nf-core/raredisease](docs/images/nf-core-raredisease_logo_light.png#gh-light-mode-only) ![nf-core/raredisease](docs/images/nf-core-raredisease_logo_dark.png#gh-dark-mode-only) -[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/raredisease/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) +[![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/raredisease/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.7995798-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.7995798) [![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A522.10.1-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) @@ -148,7 +148,7 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - +If you use nf-core/raredisease for your analysis, please cite it using the following doi: [10.5281/zenodo.7995798](https://doi.org/10.5281/zenodo.7995798) An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. From 50ac4af8473034a4981369dd3eff86731eec9eca Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Jun 2023 09:27:16 +0200 Subject: [PATCH 078/136] fix lint error --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2062503e..99fd603f 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,8 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations -If you use nf-core/raredisease for your analysis, please cite it using the following doi: [10.5281/zenodo.7995798](https://doi.org/10.5281/zenodo.7995798) + +If you use nf-core/raredisease for your analysis, please cite it using the following doi: [10.5281/zenodo.7995798](https://doi.org/10.5281/zenodo.7995798) An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. From f614ccfe331308014e1c690d652fca3e205af7a6 Mon Sep 17 00:00:00 2001 From: Adam Talbot <12817534+adamrtalbot@users.noreply.github.com> Date: Fri, 2 Jun 2023 09:25:00 +0000 Subject: [PATCH 079/136] Add public_aws_ecr profile for using AWS ECR hosted public images --- CHANGELOG.md | 6 ++++++ conf/public_aws_ecr.config | 39 ++++++++++++++++++++++++++++++++++++++ nextflow.config | 9 +++++++++ 3 files changed, 54 insertions(+) create mode 100644 conf/public_aws_ecr.config diff --git a/CHANGELOG.md b/CHANGELOG.md index eabbc201..8e6d8f43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## dev + +### `Added` + +- Add `public_aws_ecr` profile for using AWS ECR public gallery images + ## v1.0.0 - [2023-06-01] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. diff --git a/conf/public_aws_ecr.config b/conf/public_aws_ecr.config new file mode 100644 index 00000000..93d0165f --- /dev/null +++ b/conf/public_aws_ecr.config @@ -0,0 +1,39 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + AWS ECR Config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Config to set public AWS ECR images wherever possible + This improves speed when running on AWS infrastructure. + Use this as an example template when using your own private registry. +---------------------------------------------------------------------------------------- +*/ + +docker.registry = 'public.ecr.aws' +podman.registry = 'public.ecr.aws' + +process { + withName: 'ADD_MOST_SEVERE_CSQ' { + container = 'quay.io/biocontainers/python:3.8.3' + } + withName: 'ADD_MOST_SEVERE_PLI' { + container = 'quay.io/biocontainers/python:3.8.3' + } + withName: 'BWA_INDEX' { + container = 'quay.io/biocontainers/bwa:0.7.17--hed695b0_7' + } + withName: 'FASTQC' { + container = 'quay.io/biocontainers/fastqc:0.11.9--0' + } + withName: 'GET_CHROM_SIZES' { + container = 'quay.io/biocontainers/gnu-wget:1.18--0' + } + withName: 'QUALIMAP_BAMQC' { + container = 'quay.io/biocontainers/qualimap:2.2.2d--1' + } + withName: 'SAMPLESHEET_CHECK' { + container = 'quay.io/biocontainers/python:3.8.3' + } + withName: 'UNTAR' { + container = 'quay.io/docker.io/ubuntu:20.04' + } +} diff --git a/nextflow.config b/nextflow.config index a653f2e8..dc1c3e75 100644 --- a/nextflow.config +++ b/nextflow.config @@ -194,6 +194,9 @@ profiles { executor.cpus = 16 executor.memory = 60.GB } + public_aws_ecr { + includeConfig 'conf/public_aws_ecr.config' + } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } test_one_sample { includeConfig 'conf/test_one_sample.config' } @@ -238,6 +241,12 @@ env { // Capture exit codes from upstream processes when piping process.shell = ['/bin/bash', '-euo', 'pipefail'] +// Set default registry for Docker and Podman independent of -profile +// Will not be used unless Docker / Podman are enabled +// Set to your registry if you have a mirror of containers +docker.registry = 'quay.io' +podman.registry = 'quay.io' + def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true From 95bb1b3c7d54ad639074c3e56c3662ae8226ac21 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 2 Jun 2023 23:28:51 +0200 Subject: [PATCH 080/136] fix changes --- conf/test.config | 2 +- conf/test_one_sample.config | 2 +- main.nf | 2 +- modules/nf-core/gatk4/collectreadcounts/main.nf | 7 ++++--- nextflow_schema.json | 2 +- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 2 +- workflows/raredisease.nf | 6 +++--- 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/conf/test.config b/conf/test.config index 21e11055..70f865f9 100644 --- a/conf/test.config +++ b/conf/test.config @@ -31,7 +31,7 @@ params { dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" - plodiy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" + ploidy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index ae8bae27..4aa158d1 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -42,7 +42,7 @@ params { mt_intervals_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.intervals" mt_backchain_shift = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/mt_shift8000.back_chain" ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" - plodiy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" + ploidy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_sv.ini" diff --git a/main.nf b/main.nf index 6a727326..74bc6832 100644 --- a/main.nf +++ b/main.nf @@ -57,7 +57,7 @@ params.gens_interval_list = WorkflowMain.getGenomeAttribute(params, params.gens_pon = WorkflowMain.getGenomeAttribute(params, 'gens_pon') params.gens_gnomad_pos = WorkflowMain.getGenomeAttribute(params, 'gens_gnomad_pos') params.ploidy_priors = WorkflowMain.getGenomeAttribute(params, 'ploidy_priors') -params.plodiy_model = WorkflowMain.getGenomeAttribute(params, 'plodiy_model') +params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 'ploidy_model') params.cnv_model = WorkflowMain.getGenomeAttribute(params, 'cnv_model') /* diff --git a/modules/nf-core/gatk4/collectreadcounts/main.nf b/modules/nf-core/gatk4/collectreadcounts/main.nf index 8b121046..f1ef4e0b 100644 --- a/modules/nf-core/gatk4/collectreadcounts/main.nf +++ b/modules/nf-core/gatk4/collectreadcounts/main.nf @@ -9,9 +9,10 @@ process GATK4_COLLECTREADCOUNTS { input: tuple val(meta), path(input), path(input_index), path(intervals) - path(fasta) - path(fai) - path(dict) + tuple val(meta), path(fasta) + tuple val(meta), path(fai) + tuple val(meta), path(sequence_dict) + path interval_list output: tuple val(meta), path("*.hdf5"), optional: true, emit: hdf5 diff --git a/nextflow_schema.json b/nextflow_schema.json index cccafabb..3d576a85 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -406,7 +406,7 @@ "default": "None", "help_text": "When you are generating a ploidy model using GATK4 DetermineGermlineContigPloidy cohort, this path is required." }, - "plodiy_model": { + "ploidy_model": { "type": "string", "fa_icon": "fas fa-folder-open", "description": "Tar gzipped directory containing the ploidy model files", diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index a714ab79..a25313f5 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -28,7 +28,7 @@ workflow CALL_SV_GERMLINECNVCALLER { input = ch_bam_bai.combine( ch_target_bed.collect{ it[1] } ) - GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict ) + GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict, [] ) dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv .groupTuple() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 0ed7ce1f..5d99fd31 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -266,8 +266,8 @@ workflow RAREDISEASE { : ( ch_references.blacklist_bed ?: Channel.empty() ) ch_ploidy_priors = params.ploidy_priors ? Channel.fromPath(params.ploidy_priors).collect() : ( ch_references.ploidy_priors ?: Channel.empty() ) - ch_plodiy_model = params.plodiy_model ? Channel.fromPath(params.plodiy_model).collect() - : ( ch_references.plodiy_model ?: Channel.empty() ) + ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).collect() + : ( ch_references.ploidy_model ?: Channel.empty() ) ch_cnv_model = params.cnv_model ? Channel.fromPath(params.cnv_model).collect() : ( ch_references.cnv_model ?: Channel.empty() ) ch_chrom_sizes = ch_references.chrom_sizes @@ -394,7 +394,7 @@ workflow RAREDISEASE { ch_fasta_dict, ch_blacklist_bed, ch_ploidy_priors, - ch_plodiy_model, + ch_ploidy_model, ch_cnv_model ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From cee8ef2163fe8b4d9145b596be2341b12f5e8eeb Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 6 Jun 2023 01:01:27 +0200 Subject: [PATCH 081/136] update comment --- modules/local/sentieon/bwamem.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/sentieon/bwamem.nf b/modules/local/sentieon/bwamem.nf index f772d829..60ca36d6 100644 --- a/modules/local/sentieon/bwamem.nf +++ b/modules/local/sentieon/bwamem.nf @@ -9,7 +9,7 @@ process SENTIEON_BWAMEM { tuple val(meta), path(reads) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) - tuple val(meta4), path(index) // meta2 has same purpose as meta, and holds information about the genome/index + tuple val(meta4), path(index) output: tuple val(meta), path('*.bam'), emit: bam From 3bff1145b7dd6b4490f2639d30a5382bd555affd Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 7 Jun 2023 16:40:27 +0200 Subject: [PATCH 082/136] update preprocessintervals --- modules.json | 2 +- .../nf-core/gatk4/preprocessintervals/main.nf | 16 +++++--- .../gatk4/preprocessintervals/meta.yml | 41 +++++++++++++++---- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/modules.json b/modules.json index 8b34cc94..0aa5b4e2 100644 --- a/modules.json +++ b/modules.json @@ -157,7 +157,7 @@ }, "gatk4/preprocessintervals": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "1226419498a14d17f98d12d6488d333b0dbd0418", "installed_by": ["modules"] }, "gatk4/printreads": { diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf index 3edd7068..aff482f7 100644 --- a/modules/nf-core/gatk4/preprocessintervals/main.nf +++ b/modules/nf-core/gatk4/preprocessintervals/main.nf @@ -5,13 +5,14 @@ process GATK4_PREPROCESSINTERVALS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: - tuple val(meta), path(exclude_intervals) - path fasta - path fai - path dict + tuple val(meta), path(fasta) + tuple val(meta2), path(fai) + tuple val(meta3), path(dict) + tuple val(meta4), path(intervals) + tuple val(meta5), path(exclude_intervals) output: tuple val(meta), path("*.interval_list"), emit: interval_list @@ -21,8 +22,9 @@ process GATK4_PREPROCESSINTERVALS { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def include_command = intervals ? "--intervals $intervals" : "" def exclude_command = exclude_intervals ? "--exclude-intervals $exclude_intervals" : "" def avail_mem = 3072 @@ -31,8 +33,10 @@ process GATK4_PREPROCESSINTERVALS { } else { avail_mem = (task.memory.mega*0.8).intValue() } + """ gatk --java-options "-Xmx${avail_mem}M" PreprocessIntervals \\ + $include_command \\ $exclude_command \\ --reference $fasta \\ --output ${prefix}.interval_list \\ diff --git a/modules/nf-core/gatk4/preprocessintervals/meta.yml b/modules/nf-core/gatk4/preprocessintervals/meta.yml index ac61ec4f..8b6ae9b3 100644 --- a/modules/nf-core/gatk4/preprocessintervals/meta.yml +++ b/modules/nf-core/gatk4/preprocessintervals/meta.yml @@ -20,31 +20,55 @@ input: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - exclude_intervals: - type: file - description: Interval file (bed or interval_list) with the genomic regions to be excluded from the analysis (optional) - pattern: "*.{bed,interval_list}" + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: The reference fasta file pattern: "*.fasta" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fai: type: file description: Index of reference fasta file pattern: "*.fasta.fai" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - dict: type: file description: GATK sequence dictionary pattern: "*.dict" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - intervals: + type: file + description: Interval file (bed or interval_list) with the genomic regions to be included from the analysis (optional) + pattern: "*.{bed,interval_list}" + - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - exclude_intervals: + type: file + description: Interval file (bed or interval_list) with the genomic regions to be excluded from the analysis (optional) + pattern: "*.{bed,interval_list}" output: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + Groovy Map containing reference information + e.g. [ id:'test' ] - versions: type: file description: File containing software versions @@ -57,3 +81,4 @@ output: authors: - "@ryanjameskennedy" - "@ViktorHy" + - "@ramprasadn" From d71796054c3c933a9413357daef8b221e9f39f1d Mon Sep 17 00:00:00 2001 From: EmmaCAndersson Date: Wed, 14 Jun 2023 11:02:07 +0200 Subject: [PATCH 083/136] adding a sneaky comma --- bin/check_samplesheet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/check_samplesheet.py b/bin/check_samplesheet.py index 16a8ee05..d53b95cd 100755 --- a/bin/check_samplesheet.py +++ b/bin/check_samplesheet.py @@ -35,7 +35,7 @@ def __init__( first_col="fastq_1", second_col="fastq_2", single_col="single_end", - case_id_col="case_id" + case_id_col="case_id", **kwargs, ): """ From 1acc54271cd638bb034f9cab883b63b5eb582905 Mon Sep 17 00:00:00 2001 From: halfdan rydbeck Date: Thu, 15 Jun 2023 09:49:40 +0200 Subject: [PATCH 084/136] Added module upd Copied upd folder from nf-core/modules/modules --- modules/nf-core/upd/main.nf | 35 ++++++++++++++++++++++++++++++ modules/nf-core/upd/meta.yml | 42 ++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 modules/nf-core/upd/main.nf create mode 100644 modules/nf-core/upd/meta.yml diff --git a/modules/nf-core/upd/main.nf b/modules/nf-core/upd/main.nf new file mode 100644 index 00000000..ede4b1e3 --- /dev/null +++ b/modules/nf-core/upd/main.nf @@ -0,0 +1,35 @@ + +process UPD { + tag "$meta.id" + label 'process_single' + + conda "bioconda::upd=0.1.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/upd:0.1.1--pyhdfd78af_0': + 'biocontainers/upd:0.1.1--pyhdfd78af_0' }" + + input: + tuple val(meta), path(vcf) + + output: + tuple val(meta), path("*.bed"), emit: bed + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + """ + upd \\ + --vcf $vcf \\ + $args \\ + regions --out ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + upd: \$( upd --version 2>&1 | sed 's/upd, version //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/upd/meta.yml b/modules/nf-core/upd/meta.yml new file mode 100644 index 00000000..f99ca01f --- /dev/null +++ b/modules/nf-core/upd/meta.yml @@ -0,0 +1,42 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "upd" +description: Simple software to call UPD regions from germline exome/wgs trios. +keywords: + - upd + - uniparental + - disomy +tools: + - "upd": + description: "Simple software to call UPD regions from germline exome/wgs trios." + homepage: https://github.com/bjhall/upd + documentation: https://github.com/bjhall/upd + tool_dev_url: https://github.com/bjhall/upd + licence: "['MIT']" +input: + # Only when we have meta + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - vcf: + type: file + description: VCF file + pattern: "*.{vcf,vcf.gz}" +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - bed: + type: file + description: BED file + pattern: "*.{bed}" +authors: + - "@hrydbeck" From 30bff03e870b3cf2ac43ab99db3c91a4803be3c1 Mon Sep 17 00:00:00 2001 From: halfdan rydbeck Date: Thu, 15 Jun 2023 10:13:06 +0200 Subject: [PATCH 085/136] Added upd.config --- conf/modules/upd.config | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 conf/modules/upd.config diff --git a/conf/modules/upd.config b/conf/modules/upd.config new file mode 100644 index 00000000..e69de29b From f9a39949f5ef8e069ec16c52e65767b0cced0c1e Mon Sep 17 00:00:00 2001 From: halfdan rydbeck Date: Thu, 15 Jun 2023 10:15:50 +0200 Subject: [PATCH 086/136] included upd.config Added line to include upd.config --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index ceb2b8b3..8cb60d3c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -305,6 +305,7 @@ includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' includeConfig 'conf/modules/annotate_cadd.config' includeConfig 'conf/modules/peddy_check.config' +includeConfig 'conf/modules/upd.config' // Function to ensure that resource requirements don't go beyond // a maximum limit From 613d7e04274f314213ca5a91b53e47c58442ba12 Mon Sep 17 00:00:00 2001 From: halfdan rydbeck Date: Thu, 15 Jun 2023 10:40:38 +0200 Subject: [PATCH 087/136] Added description of output Added description to output.md --- docs/output.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/output.md b/docs/output.md index 5c15aa71..8da41e81 100644 --- a/docs/output.md +++ b/docs/output.md @@ -405,6 +405,18 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files - `_vep_vcfanno_mt.vcf.gz`: file containing mitochondrial annotations. - `_vep_vcfanno_mt.vcf.gz.tbi`: index of the file containing mitochondrial annotations. + + +### Call UPD regions + +[UPD](https://github.com/bjhall/upd) calls regions of uniparental disomy from germline exome/wgs trios. + +
+Output files + +- `out.bed`: file of all called regions fulfilling the --min-sites and --min-size filter criteria, including some annotation. + +
### Rank variants and filtering From 2f80fcd981bce855b4755edd60ff4a832cee4710 Mon Sep 17 00:00:00 2001 From: halfdan rydbeck Date: Mon, 19 Jun 2023 14:28:11 +0200 Subject: [PATCH 088/136] nf-core modules install --force upd Added upd to: modules.json and annotate_snvs.config and included in annotate_snvs.nf --- conf/modules/annotate_snvs.config | 5 +++++ modules.json | 5 +++++ subworkflows/local/annotate_snvs.nf | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index c012335b..bf5ac83a 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -41,6 +41,11 @@ process { ext.prefix = { "${meta.id}_rohann_vcfanno" } } + withName: '.*ANNOTATE_SNVS:UPD' { + ext.prefix = { "${meta.id}_rohann_vcfanno_upd" } + ext.args = {--af-tag GNOMADAF --proband ${meta.} --mother slowlycivilbuck --father earlycasualcaiman regions} + } + withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { ext.prefix = { "${meta.id}_rohann_vcfanno_filter" } ext.args = { '--output-type z --exclude "INFO/GNOMADAF > 0.70 | INFO/GNOMADAF_popmax > 0.70" ' } diff --git a/modules.json b/modules.json index fd139121..58cbd30c 100644 --- a/modules.json +++ b/modules.json @@ -350,6 +350,11 @@ "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", "installed_by": ["modules"] }, + "upd": { + "branch": "master", + "git_sha": "215397fb5d5d6613e7b2cf6541756a7f8c4d05f6", + "installed_by": ["modules"] + }, "vcfanno": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 589db4dd..68134705 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -7,6 +7,7 @@ include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bc include { BCFTOOLS_ROH } from '../../modules/nf-core/bcftools/roh/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhocall/annotate/main' +include { UPD } from '../../modules/nf-core/upd/main' include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' @@ -59,6 +60,7 @@ workflow ANNOTATE_SNVS { RHOCALL_ANNOTATE (ch_vcf, ch_roh_rhocall, []) + ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) ZIP_TABIX_ROHCALL.out.gz_tbi @@ -67,6 +69,8 @@ workflow ANNOTATE_SNVS { VCFANNO (ch_vcf_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) + UPD(VCFANNO.out.vcf) + ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) BCFTOOLS_VIEW(ZIP_TABIX_VCFANNO.out.gz_tbi, [], [], []) // filter on frequencies From 44a8c8b412d6b2ef1eb90c87d132798a3cb91c27 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Jun 2023 15:59:10 +0200 Subject: [PATCH 089/136] update case info --- conf/modules/annotate_snvs.config | 2 +- modules.json | 2 +- modules/nf-core/rhocall/annotate/main.nf | 2 +- modules/nf-core/rhocall/annotate/meta.yml | 6 +++++ subworkflows/local/annotate_snvs.nf | 22 ++++-------------- subworkflows/local/check_input.nf | 27 ++++++++++++++++++----- 6 files changed, 35 insertions(+), 26 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index c012335b..a69b8033 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -28,7 +28,7 @@ process { } withName: '.*ANNOTATE_SNVS:BCFTOOLS_ROH' { - ext.args = { "--samples ${meta.id} --skip-indels " } + ext.args = { "--samples ${meta.probands.join(",")} --skip-indels " } ext.prefix = { "${meta.id}_roh" } } diff --git a/modules.json b/modules.json index fd139121..b773820a 100644 --- a/modules.json +++ b/modules.json @@ -267,7 +267,7 @@ }, "rhocall/annotate": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "d73505dd68b27b53b4002e84eea21a2819907562", "installed_by": ["modules"] }, "samtools/faidx": { diff --git a/modules/nf-core/rhocall/annotate/main.nf b/modules/nf-core/rhocall/annotate/main.nf index ba55feac..a55578ab 100644 --- a/modules/nf-core/rhocall/annotate/main.nf +++ b/modules/nf-core/rhocall/annotate/main.nf @@ -9,7 +9,7 @@ process RHOCALL_ANNOTATE { input: tuple val(meta), path(vcf), path(tbi) - tuple val(meta), path(roh) + tuple val(meta2), path(roh) path bed output: diff --git a/modules/nf-core/rhocall/annotate/meta.yml b/modules/nf-core/rhocall/annotate/meta.yml index 618d0017..96e10d96 100644 --- a/modules/nf-core/rhocall/annotate/meta.yml +++ b/modules/nf-core/rhocall/annotate/meta.yml @@ -3,6 +3,7 @@ description: "Markup VCF file using rho-calls." keywords: - roh - rhocall + - runs_of_homozygosity tools: - "rhocall": description: "Call regions of homozygosity and make tentative UPD calls." @@ -18,6 +19,11 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - vcf: type: file description: vcf file diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 589db4dd..4a77c916 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -39,25 +39,9 @@ workflow ANNOTATE_SNVS { ch_vcf_scatter_in = Channel.empty() ch_vep_in = Channel.empty() - ch_vcf.map { meta, vcf, idx -> return [vcf, idx] }.set { ch_roh_vcfs } - ch_samples - .branch { it -> - affected: it.phenotype == "2" - unaffected: it.phenotype == "1" - }.set { ch_phenotype } - ch_phenotype.affected.combine(ch_roh_vcfs).set { ch_roh_input } - - BCFTOOLS_ROH (ch_roh_input, ch_gnomad_af, [], [], [], []) - - BCFTOOLS_ROH.out.roh - .map { meta, roh -> - new_meta = [:] - new_meta.id = meta.case_id - return [new_meta, roh] - } - .set { ch_roh_rhocall } + BCFTOOLS_ROH (ch_vcf, ch_gnomad_af, [], [], [], []) - RHOCALL_ANNOTATE (ch_vcf, ch_roh_rhocall, []) + RHOCALL_ANNOTATE (ch_vcf, BCFTOOLS_ROH.out.roh, []) ZIP_TABIX_ROHCALL (RHOCALL_ANNOTATE.out.vcf) @@ -153,6 +137,8 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_VEP.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) + ch_versions = ch_versions.mix(UPD_REGIONS.out.versions) + ch_versions = ch_versions.mix(UPD_SITES.out.versions) emit: vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index c7a490dc..53a6c28d 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -14,8 +14,15 @@ workflow CHECK_INPUT { .splitCsv ( header:true, sep:',' ) .set { sheet } - case_info = sheet.first() - .map { create_case_channel(it) } + case_info = sheet + .branch { row -> + affected: row.phenotype == "2" + unaffected: row.phenotype == "1" + } + .affected + .toList() + .map {create_case_channel(it)} + reads = sheet.map { row -> [[row.sample.split('_')[0]], row] } .groupTuple() .map { meta, rows -> @@ -25,6 +32,7 @@ workflow CHECK_INPUT { .map { row, numLanes -> create_fastq_channel(row + [num_lanes:numLanes]) } + samples = sheet.map { create_samples_channel(it) } emit: @@ -79,9 +87,18 @@ def create_samples_channel(LinkedHashMap row) { } // Function to get a list of metadata (e.g. case id) for the case [ meta ] -def create_case_channel(LinkedHashMap row) { - def case_info = [:] - case_info.id = row.case_id +def create_case_channel(List rows) { + def case_info = [:] + def renamed_items = [] + + for (item in rows.sample) { + renamed_items.add(item.split("_T")[0]) + } + + case_info.father = rows[0].paternal_id + case_info.mother = rows[0].maternal_id + case_info.probands = renamed_items + case_info.id = rows[0].case_id return case_info } From 57b8edef82ac537f83f597a478b2383a5149a034 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Jun 2023 16:00:40 +0200 Subject: [PATCH 090/136] update input parameters --- subworkflows/local/annotate_snvs.nf | 1 - workflows/raredisease.nf | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 4a77c916..dae70d71 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -32,7 +32,6 @@ workflow ANNOTATE_SNVS { ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] ch_gnomad_af // channel: [optional] [ path(tab), path(tbi) ] ch_split_intervals // channel: [mandatory] [ path(intervals) ] - ch_samples // channel: [mandatory] [ val(sample_id), val(sex), val(phenotype), val(paternal_id), val(maternal_id), val(case_id) ] main: ch_versions = Channel.empty() diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 151425ff..6baa607a 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -480,8 +480,7 @@ workflow RAREDISEASE { ch_vep_cache, ch_genome_fasta, ch_gnomad_af, - ch_scatter_split_intervals, - CHECK_INPUT.out.samples + ch_scatter_split_intervals ).set {ch_snv_annotate} ch_versions = ch_versions.mix(ch_snv_annotate.versions) From 418b5a4caaab2de9f00a159beab133e5a1a38a3b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 20 Jun 2023 16:03:43 +0200 Subject: [PATCH 091/136] update versions --- subworkflows/local/annotate_snvs.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index dae70d71..18f65ed1 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -136,8 +136,6 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(TABIX_VEP.out.versions.first()) ch_versions = ch_versions.mix(BCFTOOLS_CONCAT.out.versions) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_CONCAT.out.versions) - ch_versions = ch_versions.mix(UPD_REGIONS.out.versions) - ch_versions = ch_versions.mix(UPD_SITES.out.versions) emit: vcf_ann = ch_vep_ann // channel: [ val(meta), path(vcf) ] From 909675a3c6ce59228ef1d9e1ba644c16265c6a24 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Jun 2023 14:11:59 +0200 Subject: [PATCH 092/136] review suggestions --- subworkflows/local/check_input.nf | 40 ++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/subworkflows/local/check_input.nf b/subworkflows/local/check_input.nf index 53a6c28d..3c862df2 100644 --- a/subworkflows/local/check_input.nf +++ b/subworkflows/local/check_input.nf @@ -15,14 +15,10 @@ workflow CHECK_INPUT { .set { sheet } case_info = sheet - .branch { row -> - affected: row.phenotype == "2" - unaffected: row.phenotype == "1" - } - .affected .toList() .map {create_case_channel(it)} + reads = sheet.map { row -> [[row.sample.split('_')[0]], row] } .groupTuple() .map { meta, rows -> @@ -88,17 +84,33 @@ def create_samples_channel(LinkedHashMap row) { // Function to get a list of metadata (e.g. case id) for the case [ meta ] def create_case_channel(List rows) { - def case_info = [:] - def renamed_items = [] - - for (item in rows.sample) { - renamed_items.add(item.split("_T")[0]) + def case_info = [:] + def probands = [] + def upd_children = [] + def father = "" + def mother = "" + + for (item in rows) { + if (item.phenotype == "2") { + probands.add(item.sample.split("_T")[0]) + } + if ( (item.paternal_id!="0") && (item.paternal_id!="") && (item.maternal_id!="0") && (item.maternal_id!="") ) { + upd_children.add(item.sample.split("_T")[0]) + } + if ( (item.paternal_id!="0") && (item.paternal_id!="") ) { + father = item.paternal_id + } + if ( (item.maternal_id!="0") && (item.maternal_id!="") ) { + mother = item.maternal_id + } } - case_info.father = rows[0].paternal_id - case_info.mother = rows[0].maternal_id - case_info.probands = renamed_items - case_info.id = rows[0].case_id + case_info.father = father + case_info.mother = mother + case_info.probands = probands + case_info.upd_children = upd_children + case_info.id = rows[0].case_id return case_info } + From a1ab7ed11ca20083b6455f2d55591a5aad734128 Mon Sep 17 00:00:00 2001 From: halfdan rydbeck Date: Wed, 21 Jun 2023 16:10:06 +0200 Subject: [PATCH 093/136] add upd to subworkflow --- conf/modules/annotate_snvs.config | 11 ++++++++--- modules.json | 2 +- modules/nf-core/upd/main.nf | 2 +- subworkflows/local/annotate_snvs.nf | 23 +++++++++++++++++++++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 595dd959..80c8fd6f 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -41,9 +41,14 @@ process { ext.prefix = { "${meta.id}_rohann_vcfanno" } } - withName: '.*ANNOTATE_SNVS:UPD' { - ext.prefix = { "${meta.id}_rohann_vcfanno_upd" } - ext.args = {--af-tag GNOMADAF --proband ${meta.} --mother slowlycivilbuck --father earlycasualcaiman regions} + withName: '.*ANNOTATE_SNVS:UPD_SITES' { + ext.prefix = { "${meta.id}_rohann_vcfanno_upd_sites" } + ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} sites"} + } + + withName: '.*ANNOTATE_SNVS:UPD_REGIONS' { + ext.prefix = { "${meta.id}_rohann_vcfanno_upd_regions" } + ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} regions"} } withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { diff --git a/modules.json b/modules.json index 02110f46..652f56da 100644 --- a/modules.json +++ b/modules.json @@ -352,7 +352,7 @@ }, "upd": { "branch": "master", - "git_sha": "215397fb5d5d6613e7b2cf6541756a7f8c4d05f6", + "git_sha": "d17d53a66ead75ab19af0df475c316527256b9b5", "installed_by": ["modules"] }, "vcfanno": { diff --git a/modules/nf-core/upd/main.nf b/modules/nf-core/upd/main.nf index ede4b1e3..6142ec94 100644 --- a/modules/nf-core/upd/main.nf +++ b/modules/nf-core/upd/main.nf @@ -25,7 +25,7 @@ process UPD { upd \\ --vcf $vcf \\ $args \\ - regions --out ${prefix}.bed + --out ${prefix}.bed cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 8cd7da65..b6f44437 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -7,7 +7,8 @@ include { BCFTOOLS_CONCAT } from '../../modules/nf-core/bc include { BCFTOOLS_ROH } from '../../modules/nf-core/bcftools/roh/main' include { BCFTOOLS_VIEW } from '../../modules/nf-core/bcftools/view/main' include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhocall/annotate/main' -include { UPD } from '../../modules/nf-core/upd/main' +include { UPD as UPD_SITES } from '../../modules/nf-core/upd/main' +include { UPD as UPD_REGIONS } from '../../modules/nf-core/upd/main' include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' @@ -52,7 +53,23 @@ workflow ANNOTATE_SNVS { VCFANNO (ch_vcf_in, ch_vcfanno_toml, ch_vcfanno_lua, ch_vcfanno_resources) - UPD(VCFANNO.out.vcf) + VCFANNO.out.vcf + .map {meta, vcf -> + def splitchannels = [] + for (int i=0; i< meta.upd_children.size(); i++) { + upd_sample = meta.upd_children[i] + new_meta = meta + [upd_child:upd_sample] + splitchannels.add([new_meta,vcf]) + } + return splitchannels + } + .flatten() + .buffer (size: 2) + .set { ch_upd_in } + + UPD_SITES(ch_upd_in) + + UPD_REGIONS(ch_upd_in) ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) @@ -131,6 +148,8 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(RHOCALL_ANNOTATE.out.versions) ch_versions = ch_versions.mix(ZIP_TABIX_ROHCALL.out.versions) ch_versions = ch_versions.mix(VCFANNO.out.versions) + ch_versions = ch_versions.mix(UPD_SITES.out.versions) + ch_versions = ch_versions.mix(UPD_REGIONS.out.versions) ch_versions = ch_versions.mix(ZIP_TABIX_VCFANNO.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_VIEW.out.versions) From 0ba609a55082e7ad713ff7ea0d6a7a09c6e3f7c2 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:06:59 +0200 Subject: [PATCH 094/136] fix lint error --- docs/output.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/docs/output.md b/docs/output.md index 8da41e81..04107dd0 100644 --- a/docs/output.md +++ b/docs/output.md @@ -409,15 +409,7 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files ### Call UPD regions -[UPD](https://github.com/bjhall/upd) calls regions of uniparental disomy from germline exome/wgs trios. - -
-Output files - -- `out.bed`: file of all called regions fulfilling the --min-sites and --min-size filter criteria, including some annotation. - - -
+[UPD](https://github.com/bjhall/upd) calls regions of uniparental disomy from germline exome/wgs trios. Output from UPD is passed to chromograph for making plots. ### Rank variants and filtering From cdebc02e2e0e0bc31fad99d124dd6813b08098ba Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:56:13 +0200 Subject: [PATCH 095/136] add stubs --- modules.json | 288 +++++++++++++++++++++++++++--------- modules/nf-core/upd/main.nf | 12 ++ 2 files changed, 227 insertions(+), 73 deletions(-) diff --git a/modules.json b/modules.json index 652f56da..336d6fa2 100644 --- a/modules.json +++ b/modules.json @@ -8,360 +8,502 @@ "bcftools/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/concat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/filter": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/merge": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/norm": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/reheader": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/roh": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bcftools/view": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwa/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwamem2/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "bwamem2/mem": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cadd": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "cat/cat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "deepvariant": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "fastqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/mutect2": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/printreads": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/revertsam": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/shiftfasta": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/compound": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/models": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "genmod/score": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "glnexus": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplocheck": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "haplogrep2/classify": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "hmtnote/annotate": { "branch": "master", "git_sha": "a746b933e61f43f8932aa2f867d5ec7f0ded352b", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "manta/germline": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "mosdepth": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "peddy": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "0ce3ab0ac301f160225b22254fa238478b4389f2", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/liftovervcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/markduplicates": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/renamesampleinvcf": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "picard/sortvcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "qualimap/bamqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "rhocall/annotate": { "branch": "master", "git_sha": "d73505dd68b27b53b4002e84eea21a2819907562", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/faidx": { "branch": "master", "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/merge": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/sort": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/stats": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "samtools/view": { "branch": "master", "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "stranger": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "svdb/merge": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "svdb/query": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "01b3b2509d76625b6d6cd613b349fb4777712a15", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tabix/tabix": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/cov": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "tiddit/sv": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "untar": { "branch": "master", "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "upd": { "branch": "master", - "git_sha": "d17d53a66ead75ab19af0df475c316527256b9b5", - "installed_by": ["modules"] + "git_sha": "2763f1a9f5f6ae71caf91b1e1bbb616780bfff3b", + "installed_by": [ + "modules" + ] }, "vcfanno": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/upd/main.nf b/modules/nf-core/upd/main.nf index 6142ec94..fb95a11d 100644 --- a/modules/nf-core/upd/main.nf +++ b/modules/nf-core/upd/main.nf @@ -32,4 +32,16 @@ process UPD { upd: \$( upd --version 2>&1 | sed 's/upd, version //' ) END_VERSIONS """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + """ + touch ${prefix}.bed + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + upd: \$( upd --version 2>&1 | sed 's/upd, version //' ) + END_VERSIONS + """ + } From 5844100660a81af7e4016a15f048baf6944d6898 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:58:49 +0200 Subject: [PATCH 096/136] run prettier --- modules.json | 286 +++++++++++++-------------------------------------- 1 file changed, 72 insertions(+), 214 deletions(-) diff --git a/modules.json b/modules.json index 336d6fa2..fad2feb7 100644 --- a/modules.json +++ b/modules.json @@ -8,502 +8,360 @@ "bcftools/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/filter": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/norm": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/reheader": { "branch": "master", "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/roh": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bcftools/view": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwa/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "bwamem2/mem": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cadd": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "cat/cat": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "deepvariant": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "fastqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/intervallisttools": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergebamalignment": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mergevcfs": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/mutect2": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/printreads": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/revertsam": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/samtofastq": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/selectvariants": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "gatk4/variantfiltration": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/annotate": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/compound": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/models": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "genmod/score": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "glnexus": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplocheck": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "haplogrep2/classify": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "hmtnote/annotate": { "branch": "master", "git_sha": "a746b933e61f43f8932aa2f867d5ec7f0ded352b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "manta/germline": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "mosdepth": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "peddy": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/addorreplacereadgroups": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collecthsmetrics": { "branch": "master", "git_sha": "0ce3ab0ac301f160225b22254fa238478b4389f2", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectmultiplemetrics": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/collectwgsmetrics": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/liftovervcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/markduplicates": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/renamesampleinvcf": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "picard/sortvcf": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "qualimap/bamqc": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "rhocall/annotate": { "branch": "master", "git_sha": "d73505dd68b27b53b4002e84eea21a2819907562", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", "git_sha": "fd742419940e01ba1c5ecb172c3e32ec840662fe", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/sort": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", "git_sha": "735e1e04e7e01751d2d6e97055bbdb6f70683cc1", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "samtools/view": { "branch": "master", "git_sha": "3ffae3598260a99e8db3207dead9f73f87f90d1f", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "smncopynumbercaller": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "stranger": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "svdb/merge": { "branch": "master", "git_sha": "603ecbd9f45300c9788f197d2a15a005685b4220", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "svdb/query": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/bgziptabix": { "branch": "master", "git_sha": "01b3b2509d76625b6d6cd613b349fb4777712a15", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tabix/tabix": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/cov": { "branch": "master", "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "tiddit/sv": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "ucsc/wigtobigwig": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "untar": { "branch": "master", "git_sha": "5c460c5a4736974abde2843294f35307ee2b0e5e", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "upd": { "branch": "master", "git_sha": "2763f1a9f5f6ae71caf91b1e1bbb616780bfff3b", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "vcfanno": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } } } } -} \ No newline at end of file +} From c4b526db43846d1a2877b92ef3a1f2e8e54c91d3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 22 Jun 2023 10:41:14 +0200 Subject: [PATCH 097/136] remove upd.config --- conf/modules/upd.config | 0 nextflow.config | 1 - 2 files changed, 1 deletion(-) delete mode 100644 conf/modules/upd.config diff --git a/conf/modules/upd.config b/conf/modules/upd.config deleted file mode 100644 index e69de29b..00000000 diff --git a/nextflow.config b/nextflow.config index 8cb60d3c..ceb2b8b3 100644 --- a/nextflow.config +++ b/nextflow.config @@ -305,7 +305,6 @@ includeConfig 'conf/modules/rank_variants.config' includeConfig 'conf/modules/scatter_genome.config' includeConfig 'conf/modules/annotate_cadd.config' includeConfig 'conf/modules/peddy_check.config' -includeConfig 'conf/modules/upd.config' // Function to ensure that resource requirements don't go beyond // a maximum limit From 9acd853554c5d447f64542eeb761bb84871a8e73 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 26 Jun 2023 09:14:49 +0200 Subject: [PATCH 098/136] feat added eklipse --- modules.json | 5 ++ modules/nf-core/eklipse/main.nf | 58 +++++++++++++++++++ modules/nf-core/eklipse/meta.yml | 56 ++++++++++++++++++ subworkflows/local/analyse_MT.nf | 31 +++++----- .../local/mitochondria/align_and_call_MT.nf | 23 +++++--- 5 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 modules/nf-core/eklipse/main.nf create mode 100644 modules/nf-core/eklipse/meta.yml diff --git a/modules.json b/modules.json index b773820a..ca6125f5 100644 --- a/modules.json +++ b/modules.json @@ -80,6 +80,11 @@ "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", "installed_by": ["modules"] }, + "eklipse": { + "branch": "master", + "git_sha": "99d437bd91f8509d0460b7abbde47fa430055ecb", + "installed_by": ["modules"] + }, "expansionhunter": { "branch": "master", "git_sha": "0260e5d22372eae434816d6970dedf3f5adc0053", diff --git a/modules/nf-core/eklipse/main.nf b/modules/nf-core/eklipse/main.nf new file mode 100644 index 00000000..022d4832 --- /dev/null +++ b/modules/nf-core/eklipse/main.nf @@ -0,0 +1,58 @@ + +process EKLIPSE { + tag "$meta.id" + label 'process_single' + + // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + conda "bioconda::eklipse=1.8" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/eklipse:1.8--hdfd78af_1': + 'biocontainers/eklipse:1.8--hdfd78af_1' }" + + input: + tuple val(meta), path(bam) + path ref_gb + + output: + tuple val(meta), path("*deletions.csv") , emit: deletions + tuple val(meta), path("*genes.csv") , emit: genes + tuple val(meta), path("*.png") , emit: circos + 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 ref_gb = ref_gb ? "$ref_gb" : "/usr/local/bin/data/NC_012920.1.gb" + def VERSION = "1.8" // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + """ + echo "$bam\t${prefix}" > infile.txt + eKLIPse.py \\ + -in infile.txt \\ + -ref $ref_gb + mv eKLIPse_*/eKLIPse_deletions.csv eKLIPse_deletions.csv + mv eKLIPse_*/eKLIPse_genes.csv eKLIPse_genes.csv + mv eKLIPse_*/eKLIPse_${prefix}.png eKLIPse_${prefix}.png + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + eklipse: $VERSION + END_VERSIONS + """ + + stub: + def prefix = task.ext.prefix ?: "${meta.id}" + def VERSION = "1.8" + """ + touch eKLIPse_deletions.csv + touch eKLIPse_genes.csv + touch eKLIPse_${prefix}.png + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + eklipse: $VERSION + END_VERSIONS + """ +} diff --git a/modules/nf-core/eklipse/meta.yml b/modules/nf-core/eklipse/meta.yml new file mode 100644 index 00000000..025ef74d --- /dev/null +++ b/modules/nf-core/eklipse/meta.yml @@ -0,0 +1,56 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "eklipse" +description: tool for detection and quantification of large mtDNA rearrangements. +keywords: + - eklipse + - mitochondria + - mtDNA + - circos + - deletion + - SV +tools: + - "eklipse": + description: "tool for detection and quantification of large mtDNA rearrangements." + homepage: "https://github.com/dooguypapua/eKLIPse/tree/master" + documentation: "https://github.com/dooguypapua/eKLIPse/tree/master" + tool_dev_url: "https://github.com/dooguypapua/eKLIPse/tree/master" + doi: "10.1038/s41436-018-0350-8" + licence: ["GNU General Public v3 or later (GPL v3+)"] + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - bam: + type: file + description: MT BAM/SAM file + pattern: "*.{bam,sam}" + - ref_gb: + type: file + description: mtDNA reference genome in Genbank format, optional if empty NC_012920.1.gb will be used + pattern: "*.{gb}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - csv: + type: file + description: csv file containing deletions + pattern: "*.{csv}" + - circos: + type: file + description: png file with circos plot of mt + pattern: "*.{png}" + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@Lucpen" diff --git a/subworkflows/local/analyse_MT.nf b/subworkflows/local/analyse_MT.nf index 65a05162..af5cebff 100644 --- a/subworkflows/local/analyse_MT.nf +++ b/subworkflows/local/analyse_MT.nf @@ -98,18 +98,21 @@ workflow ANALYSE_MT { ch_versions = ch_versions.mix(MERGE_ANNOTATE_MT.out.versions) emit: - vcf = MERGE_ANNOTATE_MT.out.vcf // channel: [ val(meta), path(vcf) ] - tbi = MERGE_ANNOTATE_MT.out.tbi // channel: [ val(meta), path(tbi) ] - stats = ALIGN_AND_CALL_MT.out.stats // channel: [ val(meta), path(stats) ] - filt_stats = ALIGN_AND_CALL_MT.out.filt_stats // channel: [ val(meta), path(tsv) ] - mt_del_result = ALIGN_AND_CALL_MT.out.mt_del_result // channel: [ val(meta), path(txt) ] - stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats // channel: [ val(meta), path(stats) ] - filt_stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.filt_stats // channel: [ val(meta), path(tsv) ] - haplog = MERGE_ANNOTATE_MT.out.haplog // channel: [ val(meta), path(txt) ] - report = MERGE_ANNOTATE_MT.out.report // channel: [ path(html) ] - txt = ALIGN_AND_CALL_MT.out.txt // channel: [ val(meta), path(txt) ] - html = ALIGN_AND_CALL_MT.out.html // channel: [ val(meta), path(html) ] - txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt // channel: [ val(meta), path(txt) ] - html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html // channel: [ val(meta), path(html) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = MERGE_ANNOTATE_MT.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = MERGE_ANNOTATE_MT.out.tbi // channel: [ val(meta), path(tbi) ] + stats = ALIGN_AND_CALL_MT.out.stats // channel: [ val(meta), path(stats) ] + filt_stats = ALIGN_AND_CALL_MT.out.filt_stats // channel: [ val(meta), path(tsv) ] + mt_del_result = ALIGN_AND_CALL_MT.out.mt_del_result // channel: [ val(meta), path(txt) ] + stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.stats // channel: [ val(meta), path(stats) ] + filt_stats_sh = ALIGN_AND_CALL_MT_SHIFT.out.filt_stats // channel: [ val(meta), path(tsv) ] + eklipse_del = ALIGN_AND_CALL_MT.out.eklipse_del // channel: [ val(meta), path(csv) ] + eklipse_genes = ALIGN_AND_CALL_MT.out.eklipse_genes // channel: [ val(meta), path(csv) ] + eklipse_circos = ALIGN_AND_CALL_MT.out.eklipse_circos // channel: [ val(meta), path(png) ] + haplog = MERGE_ANNOTATE_MT.out.haplog // channel: [ val(meta), path(txt) ] + report = MERGE_ANNOTATE_MT.out.report // channel: [ path(html) ] + txt = ALIGN_AND_CALL_MT.out.txt // channel: [ val(meta), path(txt) ] + html = ALIGN_AND_CALL_MT.out.html // channel: [ val(meta), path(html) ] + txt_sh = ALIGN_AND_CALL_MT_SHIFT.out.txt // channel: [ val(meta), path(txt) ] + html_sh = ALIGN_AND_CALL_MT_SHIFT.out.html // channel: [ val(meta), path(html) ] + versions = ch_versions // channel: [ path(versions.yml) ] } diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index a913c1ee..4ba652a8 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -14,6 +14,7 @@ include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } fr include { GATK4_FILTERMUTECTCALLS as GATK4_FILTERMUTECTCALLS_MT } from '../../../modules/nf-core/gatk4/filtermutectcalls/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' include { MT_DELETION } from '../../../modules/local/mt_deletion_script' +include { EKLIPSE as EKLIPSE_MT } from '../../../modules/nf-core/tabix/tabix/main' workflow ALIGN_AND_CALL_MT { take: @@ -50,6 +51,8 @@ workflow ALIGN_AND_CALL_MT { ch_sort_index_bam = SAMTOOLS_SORT_MT.out.bam.join(SAMTOOLS_INDEX_MT.out.bai, failOnMismatch:true, failOnDuplicate:true) ch_sort_index_bam_int_mt = ch_sort_index_bam.combine(ch_intervals) + EKLIPSE_MT(ch_sort_index_bam,[]) + MT_DELETION(ch_sort_index_bam, ch_fasta) GATK4_MUTECT2_MT (ch_sort_index_bam_int_mt, ch_fasta, ch_fai, ch_dict, [], [], [],[]) @@ -72,18 +75,22 @@ workflow ALIGN_AND_CALL_MT { ch_versions = ch_versions.mix(PICARD_MARKDUPLICATES_MT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_SORT_MT.out.versions.first()) ch_versions = ch_versions.mix(SAMTOOLS_INDEX_MT.out.versions.first()) + ch_versions = ch_versions.mix(EKLIPSE_MT.out.versions.first()) ch_versions = ch_versions.mix(MT_DELETION.out.versions.first()) ch_versions = ch_versions.mix(GATK4_MUTECT2_MT.out.versions.first()) ch_versions = ch_versions.mix(HAPLOCHECK_MT.out.versions.first()) ch_versions = ch_versions.mix(GATK4_FILTERMUTECTCALLS_MT.out.versions.first()) emit: - vcf = GATK4_FILTERMUTECTCALLS_MT.out.vcf // channel: [ val(meta), path(vcf) ] - tbi = GATK4_FILTERMUTECTCALLS_MT.out.tbi // channel: [ val(meta), path(tbi) ] - stats = GATK4_MUTECT2_MT.out.stats // channel: [ val(meta), path(stats) ] - filt_stats = GATK4_FILTERMUTECTCALLS_MT.out.stats // channel: [ val(meta), path(tsv) ] - txt = HAPLOCHECK_MT.out.txt // channel: [ val(meta), path(txt) ] - html = HAPLOCHECK_MT.out.html // channel: [ val(meta), path(html) ] - mt_del_result = MT_DELETION.out.mt_del_result // channel: [ val(meta), path(txt) ] - versions = ch_versions // channel: [ path(versions.yml) ] + vcf = GATK4_FILTERMUTECTCALLS_MT.out.vcf // channel: [ val(meta), path(vcf) ] + tbi = GATK4_FILTERMUTECTCALLS_MT.out.tbi // channel: [ val(meta), path(tbi) ] + stats = GATK4_MUTECT2_MT.out.stats // channel: [ val(meta), path(stats) ] + filt_stats = GATK4_FILTERMUTECTCALLS_MT.out.stats // channel: [ val(meta), path(tsv) ] + eklipse_del = EKLIPSE_MT.out.deletions // channel: [ val(meta), path(csv) ] + eklipse_genes = EKLIPSE_MT.out.genes // channel: [ val(meta), path(csv) ] + eklipse_circos = EKLIPSE_MT.out.circos // channel: [ val(meta), path(png) ] + txt = HAPLOCHECK_MT.out.txt // channel: [ val(meta), path(txt) ] + html = HAPLOCHECK_MT.out.html // channel: [ val(meta), path(html) ] + mt_del_result = MT_DELETION.out.mt_del_result // channel: [ val(meta), path(txt) ] + versions = ch_versions // channel: [ path(versions.yml) ] } From 9ddfbc534a77f0eeba751982782a197cdb934bc5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 09:18:26 +0200 Subject: [PATCH 099/136] update upd module --- modules.json | 2 +- modules/nf-core/upd/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index fad2feb7..523143c5 100644 --- a/modules.json +++ b/modules.json @@ -352,7 +352,7 @@ }, "upd": { "branch": "master", - "git_sha": "2763f1a9f5f6ae71caf91b1e1bbb616780bfff3b", + "git_sha": "9b159849d74f0eef251168c81c16da08215bbad5", "installed_by": ["modules"] }, "vcfanno": { diff --git a/modules/nf-core/upd/main.nf b/modules/nf-core/upd/main.nf index fb95a11d..a73fcd45 100644 --- a/modules/nf-core/upd/main.nf +++ b/modules/nf-core/upd/main.nf @@ -25,7 +25,7 @@ process UPD { upd \\ --vcf $vcf \\ $args \\ - --out ${prefix}.bed + | sort -k 1,1 -k 2,2n >${prefix}.bed cat <<-END_VERSIONS > versions.yml "${task.process}": From 13eec8ff71b06a0b23b0ba59c8fe2aaa61838062 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 09:18:58 +0200 Subject: [PATCH 100/136] Update subworkflows/local/annotate_snvs.nf Co-authored-by: Anders Jemt --- subworkflows/local/annotate_snvs.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index b6f44437..8e61a46e 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -57,7 +57,7 @@ workflow ANNOTATE_SNVS { .map {meta, vcf -> def splitchannels = [] for (int i=0; i< meta.upd_children.size(); i++) { - upd_sample = meta.upd_children[i] + upd_sample = meta.upd_children[i] new_meta = meta + [upd_child:upd_sample] splitchannels.add([new_meta,vcf]) } From ff3009b9da31daa80a6b60822ec8a0052227cf89 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 26 Jun 2023 09:54:21 +0200 Subject: [PATCH 101/136] feat added citations --- CITATIONS.md | 4 ++++ README.md | 2 ++ subworkflows/local/mitochondria/align_and_call_MT.nf | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CITATIONS.md b/CITATIONS.md index 44580fdf..2c4ff9f5 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -32,6 +32,10 @@ > Poplin R, Chang PC, Alexander D, et al. A universal SNP and small-indel variant caller using deep neural networks. Nat Biotechnol. 2018;36(10):983-987. doi:10.1038/nbt.4235 +- [eKLIPse](https://www.nature.com/articles/s41436-018-0350-8) + + > Goudenège D, Bris C, Hoffmann V, et al. eKLIPse: a sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genet Med 21, 1407–1416 (2019). doi:10.1038/s41436-018-0350-8 + - [Ensembl VEP](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-016-0974-4) > McLaren W, Gil L, Hunt SE, et al. The Ensembl Variant Effect Predictor. Genome Biol. 2016;17(1):122. doi:10.1186/s13059-016-0974-4 diff --git a/README.md b/README.md index 68f67234..25a8486e 100644 --- a/README.md +++ b/README.md @@ -70,8 +70,10 @@ On release, automated continuous integration tests run the pipeline on a full-si **7. Mitochondrial analysis:** - [Alignment and variant calling - GATK Mitochondrial short variant discovery pipeline ](https://gatk.broadinstitute.org/hc/en-us/articles/4403870837275-Mitochondrial-short-variant-discovery-SNVs-Indels-) +- [eKLIPse](https://github.com/dooguypapua/eKLIPse/tree/master) - Annotation: - [HaploGrep2](https://github.com/seppinho/haplogrep-cmd) + - [Hmtnote](https://github.com/robertopreste/HmtNote) - [vcfanno](https://github.com/brentp/vcfanno) - [CADD](https://cadd.gs.washington.edu/) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) diff --git a/subworkflows/local/mitochondria/align_and_call_MT.nf b/subworkflows/local/mitochondria/align_and_call_MT.nf index 4ba652a8..be060a7d 100644 --- a/subworkflows/local/mitochondria/align_and_call_MT.nf +++ b/subworkflows/local/mitochondria/align_and_call_MT.nf @@ -14,7 +14,7 @@ include { GATK4_MUTECT2 as GATK4_MUTECT2_MT } fr include { GATK4_FILTERMUTECTCALLS as GATK4_FILTERMUTECTCALLS_MT } from '../../../modules/nf-core/gatk4/filtermutectcalls/main' include { TABIX_TABIX as TABIX_TABIX_MT } from '../../../modules/nf-core/tabix/tabix/main' include { MT_DELETION } from '../../../modules/local/mt_deletion_script' -include { EKLIPSE as EKLIPSE_MT } from '../../../modules/nf-core/tabix/tabix/main' +include { EKLIPSE as EKLIPSE_MT } from '../../../modules/nf-core/eklipse/main' workflow ALIGN_AND_CALL_MT { take: From b0bd15bebd559398ede344f3ee42573b835c9a83 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 26 Jun 2023 10:03:26 +0200 Subject: [PATCH 102/136] fix run prettier --- CITATIONS.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index 2c4ff9f5..e38d3d14 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -33,7 +33,7 @@ > Poplin R, Chang PC, Alexander D, et al. A universal SNP and small-indel variant caller using deep neural networks. Nat Biotechnol. 2018;36(10):983-987. doi:10.1038/nbt.4235 - [eKLIPse](https://www.nature.com/articles/s41436-018-0350-8) - + > Goudenège D, Bris C, Hoffmann V, et al. eKLIPse: a sensitive tool for the detection and quantification of mitochondrial DNA deletions from next-generation sequencing data. Genet Med 21, 1407–1416 (2019). doi:10.1038/s41436-018-0350-8 - [Ensembl VEP](https://genomebiology.biomedcentral.com/articles/10.1186/s13059-016-0974-4) diff --git a/README.md b/README.md index 25a8486e..841d5aa7 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - [eKLIPse](https://github.com/dooguypapua/eKLIPse/tree/master) - Annotation: - [HaploGrep2](https://github.com/seppinho/haplogrep-cmd) - - [Hmtnote](https://github.com/robertopreste/HmtNote) + - [Hmtnote](https://github.com/robertopreste/HmtNote) - [vcfanno](https://github.com/brentp/vcfanno) - [CADD](https://cadd.gs.washington.edu/) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) From 0b34b25af71341aba8a8ee633781aeb92b8810f8 Mon Sep 17 00:00:00 2001 From: lucpen Date: Mon, 26 Jun 2023 10:45:26 +0200 Subject: [PATCH 103/136] Retry the test From cfb6edb9840789db27dad7f436c6bfad25dd2ce8 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:16:44 +0200 Subject: [PATCH 104/136] add chromograph [skip ci] --- conf/modules/annotate_snvs.config | 26 ++++++++++- modules.json | 5 +++ modules/nf-core/chromograph/main.nf | 65 ++++++++++++++++++++++++++++ modules/nf-core/chromograph/meta.yml | 63 +++++++++++++++++++++++++++ subworkflows/local/annotate_snvs.nf | 9 +++- 5 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 modules/nf-core/chromograph/main.nf create mode 100644 modules/nf-core/chromograph/meta.yml diff --git a/conf/modules/annotate_snvs.config b/conf/modules/annotate_snvs.config index 80c8fd6f..093e94a1 100644 --- a/conf/modules/annotate_snvs.config +++ b/conf/modules/annotate_snvs.config @@ -48,7 +48,31 @@ process { withName: '.*ANNOTATE_SNVS:UPD_REGIONS' { ext.prefix = { "${meta.id}_rohann_vcfanno_upd_regions" } - ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} regions"} + ext.args = {"--af-tag GNOMADAF --proband ${meta.upd_child} --mother ${meta.mother} --father ${meta.father} regions --min-size 5 --min-sites 1"} + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } + } + + withName: '.*ANNOTATE_SNVS:CHROMOGRAPH_SITES' { + ext.prefix = { "${meta7.id}_rohann_vcfanno_upd_sites_chromograph" } + ext.args = { "--euploid" } + tag = {"${meta7.id}"} + publishDir = [ + path: { "${params.outdir}/annotate_snv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: '.*ANNOTATE_SNVS:CHROMOGRAPH_REGIONS' { + ext.prefix = { "${meta6.id}_rohann_vcfanno_upd_regions_chromograph" } + ext.args = { '--euploid' } + ext.when = { !(workflow.profile.tokenize(',').intersect(['test', 'test_one_sample']).size() >= 1) || workflow.stubRun } + tag = {"${meta6.id}"} + publishDir = [ + path: { "${params.outdir}/annotate_snv" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] } withName: '.*ANNOTATE_SNVS:BCFTOOLS_VIEW' { diff --git a/modules.json b/modules.json index 523143c5..654c81af 100644 --- a/modules.json +++ b/modules.json @@ -70,6 +70,11 @@ "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, + "chromograph": { + "branch": "master", + "git_sha": "2513c3ee7bbab3c283050068f3118dfed2bbbd12", + "installed_by": ["modules"] + }, "custom/dumpsoftwareversions": { "branch": "master", "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", diff --git a/modules/nf-core/chromograph/main.nf b/modules/nf-core/chromograph/main.nf new file mode 100644 index 00000000..b15d40c7 --- /dev/null +++ b/modules/nf-core/chromograph/main.nf @@ -0,0 +1,65 @@ +process CHROMOGRAPH { + tag "$meta.id" + label 'process_single' + + conda "bioconda::chromograph=1.3.1" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/chromograph:1.3.1--pyhdfd78af_1': + 'biocontainers/chromograph:1.3.1--pyhdfd78af_1' }" + + input: + tuple val(meta), path(autozyg) + tuple val(meta), path(coverage) + tuple val(meta), path(exome) + tuple val(meta), path(fracsnp) + tuple val(meta), path(ideogram) + tuple val(meta), path(regions) + tuple val(meta), path(sites) + + output: + tuple val(meta), path("${prefix}"), emit: plots + 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 autozyg_param = autozyg ? "--autozyg ${autozyg}" : '' + def coverage_param = coverage ? "--coverage ${coverage}" : '' + def exome_param = exome ? "--exom ${exome}" : '' + def fracsnp_param = fracsnp ? "--fracsnp ${fracsnp}" : '' + def ideogram_param = ideogram ? "--ideogram ${ideogram}" : '' + def regions_param = regions ? "--regions ${regions}" : '' + def sites_param = sites ? "--sites ${sites}" : '' + """ + chromograph \\ + $args \\ + $autozyg_param \\ + $coverage_param \\ + $exome_param \\ + $fracsnp_param \\ + $ideogram_param \\ + $regions_param \\ + $sites_param \\ + --outd ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + chromograph: \$(echo \$(chromograph --version 2>&1) | sed 's/chromograph //' ) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + """ + mkdir ${prefix} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + chromograph: \$(echo \$(chromograph --version 2>&1) | sed 's/chromograph //' ) + END_VERSIONS + """ +} diff --git a/modules/nf-core/chromograph/meta.yml b/modules/nf-core/chromograph/meta.yml new file mode 100644 index 00000000..3890d0d5 --- /dev/null +++ b/modules/nf-core/chromograph/meta.yml @@ -0,0 +1,63 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: "chromograph" +description: Chromograph is a python package to create PNG images from genetics data such as BED and WIG files. +keywords: + - chromosome_visualization + - bed + - wig + - png +tools: + - "chromograph": + description: "Chromograph is a python package to create PNG images from genetics data such as BED and WIG files." + homepage: "https://github.com/Clinical-Genomics/chromograph" + documentation: "https://github.com/Clinical-Genomics/chromograph/blob/master/README.md" + licence: "['MIT']" + +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - autozyg: + type: file + description: Bed file containing the regions of autozygosity + - coverage: + type: file + description: Wig file containing the coverage information + - exome: + type: file + description: Bed file containing the coverage for exome. + - fracsnp: + type: file + description: Wig file containing the fraction of homozygous SNPs + - ideogram: + type: file + description: | + Bed file containing information necessary for ideogram plots. + Format ['chrom', 'start', 'end', 'name', 'gStain'] + - regions: + type: file + description: Bed file containing UPD regions + - sites: + type: file + description: Bed file containing UPD sites + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - plots: + type: file + description: Directory containing the plots in png format + pattern: "*.png" + +authors: + - "@ramprasadn" diff --git a/subworkflows/local/annotate_snvs.nf b/subworkflows/local/annotate_snvs.nf index 8e61a46e..bd5fdfb8 100644 --- a/subworkflows/local/annotate_snvs.nf +++ b/subworkflows/local/annotate_snvs.nf @@ -9,6 +9,8 @@ include { BCFTOOLS_VIEW } from '../../modules/nf-core/bc include { RHOCALL_ANNOTATE } from '../../modules/nf-core/rhocall/annotate/main' include { UPD as UPD_SITES } from '../../modules/nf-core/upd/main' include { UPD as UPD_REGIONS } from '../../modules/nf-core/upd/main' +include { CHROMOGRAPH as CHROMOGRAPH_SITES } from '../../modules/nf-core/chromograph/main' +include { CHROMOGRAPH as CHROMOGRAPH_REGIONS } from '../../modules/nf-core/chromograph/main' include { ENSEMBLVEP as ENSEMBLVEP_SNV } from '../../modules/local/ensemblvep/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_ROHCALL } from '../../modules/nf-core/tabix/bgziptabix/main' include { TABIX_BGZIPTABIX as ZIP_TABIX_VCFANNO } from '../../modules/nf-core/tabix/bgziptabix/main' @@ -66,10 +68,11 @@ workflow ANNOTATE_SNVS { .flatten() .buffer (size: 2) .set { ch_upd_in } - - UPD_SITES(ch_upd_in) + UPD_SITES(ch_upd_in) UPD_REGIONS(ch_upd_in) + CHROMOGRAPH_SITES([[],[]], [[],[]], [[],[]], [[],[]], [[],[]], [[],[]], UPD_SITES.out.bed) + CHROMOGRAPH_REGIONS([[],[]], [[],[]], [[],[]], [[],[]], [[],[]], UPD_REGIONS.out.bed, [[],[]]) ZIP_TABIX_VCFANNO (VCFANNO.out.vcf) @@ -150,6 +153,8 @@ workflow ANNOTATE_SNVS { ch_versions = ch_versions.mix(VCFANNO.out.versions) ch_versions = ch_versions.mix(UPD_SITES.out.versions) ch_versions = ch_versions.mix(UPD_REGIONS.out.versions) + ch_versions = ch_versions.mix(CHROMOGRAPH_SITES.out.versions) + ch_versions = ch_versions.mix(CHROMOGRAPH_REGIONS.out.versions) ch_versions = ch_versions.mix(ZIP_TABIX_VCFANNO.out.versions) ch_versions = ch_versions.mix(BCFTOOLS_VIEW.out.versions) ch_versions = ch_versions.mix(TABIX_BCFTOOLS_VIEW.out.versions) From 3d8227a7264726a691d4bcc81fc11a2679cbaf60 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 18:27:36 +0200 Subject: [PATCH 105/136] update chromograph --- modules.json | 2 +- modules/nf-core/chromograph/main.nf | 62 +++++++++++++++++++++------- modules/nf-core/chromograph/meta.yml | 30 ++++++++++++++ 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/modules.json b/modules.json index 4871d930..f3bd866a 100644 --- a/modules.json +++ b/modules.json @@ -72,7 +72,7 @@ }, "chromograph": { "branch": "master", - "git_sha": "2513c3ee7bbab3c283050068f3118dfed2bbbd12", + "git_sha": "aad210ba51500be029740d088b4b4827f6f41509", "installed_by": ["modules"] }, "custom/dumpsoftwareversions": { diff --git a/modules/nf-core/chromograph/main.nf b/modules/nf-core/chromograph/main.nf index b15d40c7..9049dbfa 100644 --- a/modules/nf-core/chromograph/main.nf +++ b/modules/nf-core/chromograph/main.nf @@ -9,12 +9,12 @@ process CHROMOGRAPH { input: tuple val(meta), path(autozyg) - tuple val(meta), path(coverage) - tuple val(meta), path(exome) - tuple val(meta), path(fracsnp) - tuple val(meta), path(ideogram) - tuple val(meta), path(regions) - tuple val(meta), path(sites) + tuple val(meta2), path(coverage) + tuple val(meta3), path(exome) + tuple val(meta4), path(fracsnp) + tuple val(meta5), path(ideogram) + tuple val(meta6), path(regions) + tuple val(meta7), path(sites) output: tuple val(meta), path("${prefix}"), emit: plots @@ -25,14 +25,29 @@ process CHROMOGRAPH { script: def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - def autozyg_param = autozyg ? "--autozyg ${autozyg}" : '' - def coverage_param = coverage ? "--coverage ${coverage}" : '' - def exome_param = exome ? "--exom ${exome}" : '' - def fracsnp_param = fracsnp ? "--fracsnp ${fracsnp}" : '' - def ideogram_param = ideogram ? "--ideogram ${ideogram}" : '' - def regions_param = regions ? "--regions ${regions}" : '' - def sites_param = sites ? "--sites ${sites}" : '' + def autozyg_param = autozyg ? "--autozyg ${autozyg}" : '' + def coverage_param = coverage ? "--coverage ${coverage}" : '' + def exome_param = exome ? "--exom ${exome}" : '' + def fracsnp_param = fracsnp ? "--fracsnp ${fracsnp}" : '' + def ideogram_param = ideogram ? "--ideogram ${ideogram}" : '' + def regions_param = regions ? "--regions ${regions}" : '' + def sites_param = sites ? "--sites ${sites}" : '' + + if (autozyg) { + prefix = task.ext.prefix ?: "${meta.id}" + } else if (coverage) { + prefix = task.ext.prefix ?: "${meta2.id}" + } else if (exome) { + prefix = task.ext.prefix ?: "${meta3.id}" + } else if (fracsnp) { + prefix = task.ext.prefix ?: "${meta4.id}" + } else if (ideogram) { + prefix = task.ext.prefix ?: "${meta5.id}" + } else if (regions) { + prefix = task.ext.prefix ?: "${meta6.id}" + } else { + prefix = task.ext.prefix ?: "${meta7.id}" + } """ chromograph \\ $args \\ @@ -52,8 +67,23 @@ process CHROMOGRAPH { """ stub: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + + if (autozyg) { + prefix = task.ext.prefix ?: "${meta.id}" + } else if (coverage) { + prefix = task.ext.prefix ?: "${meta2.id}" + } else if (exome) { + prefix = task.ext.prefix ?: "${meta3.id}" + } else if (fracsnp) { + prefix = task.ext.prefix ?: "${meta4.id}" + } else if (ideogram) { + prefix = task.ext.prefix ?: "${meta5.id}" + } else if (regions) { + prefix = task.ext.prefix ?: "${meta6.id}" + } else { + prefix = task.ext.prefix ?: "${meta7.id}" + } """ mkdir ${prefix} diff --git a/modules/nf-core/chromograph/meta.yml b/modules/nf-core/chromograph/meta.yml index 3890d0d5..cac5c7aa 100644 --- a/modules/nf-core/chromograph/meta.yml +++ b/modules/nf-core/chromograph/meta.yml @@ -20,6 +20,36 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta4: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta5: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta6: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta7: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - autozyg: type: file description: Bed file containing the regions of autozygosity From 7483d7e2bfa5ff73f0a22143b6a0fae7485105d1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:16:11 +0200 Subject: [PATCH 106/136] update readme and output --- README.md | 2 ++ docs/output.md | 24 ++++++++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 841d5aa7..2feae6bb 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,8 @@ On release, automated continuous integration tests run the pipeline on a full-si - [vcfanno](https://github.com/brentp/vcfanno) - [CADD](https://cadd.gs.washington.edu/) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) +- [UPD](https://github.com/bjhall/upd) +- [chromograph](https://github.com/Clinical-Genomics/chromograph) **6. Annotation - SV:** diff --git a/docs/output.md b/docs/output.md index 04107dd0..856b0a79 100644 --- a/docs/output.md +++ b/docs/output.md @@ -42,6 +42,8 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [vcfanno](#vcfanno) - [CADD](#cadd) - [VEP](#vep) + - [UPD](#upd) + - [Chromograph](#chromograph) - [Annotation - SV](#annotation---sv) - [SVDB query](#svdb-query) - [VEP](#vep-1) @@ -331,6 +333,24 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e +#### UPD + +[UPD](https://github.com/bjhall/upd) calls regions of uniparental disomy from germline exome/wgs trios. Output from UPD is passed to chromograph for making plots. + +#### Chromograph + +[Chromograph](https://github.com/Clinical-Genomics/chromograph) is a python package to create PNG images from genetics data such as BED and WIG files. + +
+Output files + +- `annotate_snv/*sites_chromograph` + - `_rohann_vcfanno_upd_sites_.png`: file containing a plot showing upd sites across chromosomes. +- `annotate_snv/*regions_chromograph` + - `_rohann_vcfanno_upd_regions_.png`: file containing a plot showing upd regions across chromosomes. + +
+ ### Annotation - SV #### SVDB query @@ -407,10 +427,6 @@ We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files -### Call UPD regions - -[UPD](https://github.com/bjhall/upd) calls regions of uniparental disomy from germline exome/wgs trios. Output from UPD is passed to chromograph for making plots. - ### Rank variants and filtering #### GENMOD From 8dc606b8431f6e03f6d022650f53241b402f324e Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:31:23 +0200 Subject: [PATCH 107/136] update changelog --- CHANGELOG.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db28ce74..13232758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` -- Add `public_aws_ecr` profile for using AWS ECR public gallery images -- GATK's ShiftFasta to generate all the files required for mitochondrial analysis -- Feature to calculate CADD scores for indels -- HmtNote to annotate mitochondria -- MT del script to detect mitochondrial deltions +- Add `public_aws_ecr` profile for using AWS ECR public gallery images [#360](https://github.com/nf-core/raredisease/pull/360) +- GATK's ShiftFasta to generate all the files required for mitochondrial analysis [#354](https://github.com/nf-core/raredisease/pull/354) +- Feature to calculate CADD scores for indels [#325](https://github.com/nf-core/raredisease/pull/325) +- HmtNote to annotate mitochondria [#355](https://github.com/nf-core/raredisease/pull/355) +- MT del script to detect mitochondrial deletions [#349](https://github.com/nf-core/raredisease/pull/349) +- eKLIPse to identify large mitochondrial deletions [#365](https://github.com/nf-core/raredisease/pull/365) +- UPD+Chromograph to identify and visualize UPD sites and regions in the chromosomes [#364](https://github.com/nf-core/raredisease/pull/364) and [#366](https://github.com/nf-core/raredisease/pull/366) ## v1.0.0 - [2023-06-01] From 34679117eb6befe68572aedca9bc4ef49fd8d92b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 26 Jun 2023 19:33:17 +0200 Subject: [PATCH 108/136] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2feae6bb..6a60f7a0 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ On release, automated continuous integration tests run the pipeline on a full-si - [CADD](https://cadd.gs.washington.edu/) - [VEP](https://www.ensembl.org/info/docs/tools/vep/index.html) - [UPD](https://github.com/bjhall/upd) -- [chromograph](https://github.com/Clinical-Genomics/chromograph) +- [Chromograph](https://github.com/Clinical-Genomics/chromograph) **6. Annotation - SV:** @@ -141,7 +141,7 @@ For more details about the output files and reports, please refer to the nf-core/raredisease was written in a collaboration between the Clinical Genomics nodes in Sweden, with major contributions from [Ramprasad Neethiraj](https://github.com/ramprasadn), [Anders Jemt](https://github.com/jemten), [Lucia Pena Perez](https://github.com/Lucpen), and [Mei Wu](https://github.com/projectoriented) at Clinical Genomics Stockholm. -Additional contributors were [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid) and [Emma Västerviga](https://github.com/EmmaCAndersson) (Clinical Genomics Gothenburg); [Lauri Mesilaakso](https://github.com/ljmesi) (Clinical Genomics Linköping); [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder) (Clinical Genomics Örebro); [Annick Renevey](https://github.com/rannick) and [Peter Pruisscher](https://github.com/peterpru) (Clinical Genomics Stockholm); [Ryan Kennedy](https://github.com/ryanjameskennedy) (Clinical Genomics Lund); and [Lucas Taniguti](https://github.com/lmtani). +Additional contributors were [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid) and [Emma Västerviga](https://github.com/EmmaCAndersson) (Clinical Genomics Gothenburg); [Halfdan Rydbeck](https://github.com/hrydbeck) and [Lauri Mesilaakso](https://github.com/ljmesi) (Clinical Genomics Linköping); [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder) (Clinical Genomics Örebro); [Annick Renevey](https://github.com/rannick) and [Peter Pruisscher](https://github.com/peterpru) (Clinical Genomics Stockholm); [Ryan Kennedy](https://github.com/ryanjameskennedy) (Clinical Genomics Lund); and [Lucas Taniguti](https://github.com/lmtani). We thank the nf-core community for their extensive assistance in the development of this pipeline. From b91c958dd1e97ee708709b110fa4ca5eba049c00 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 28 Jun 2023 13:22:17 +0200 Subject: [PATCH 109/136] update modules --- modules.json | 22 +++++----- .../nf-core/gatk4/annotateintervals/main.nf | 2 +- .../nf-core/gatk4/collectreadcounts/main.nf | 9 ++-- .../nf-core/gatk4/collectreadcounts/meta.yml | 19 ++++++++- .../determinegermlinecontigploidy/main.nf | 36 +++++++--------- .../determinegermlinecontigploidy/meta.yml | 16 +++++--- .../nf-core/gatk4/germlinecnvcaller/main.nf | 34 +++++++-------- .../nf-core/gatk4/germlinecnvcaller/meta.yml | 25 +++++++---- .../gatk4/postprocessgermlinecnvcalls/main.nf | 21 ++++------ .../postprocessgermlinecnvcalls/meta.yml | 17 ++++++-- .../nf-core/gatk4/preprocessintervals/main.nf | 16 +++++--- .../gatk4/preprocessintervals/meta.yml | 41 +++++++++++++++---- 12 files changed, 152 insertions(+), 106 deletions(-) diff --git a/modules.json b/modules.json index 8b34cc94..f89a5e52 100644 --- a/modules.json +++ b/modules.json @@ -17,12 +17,12 @@ }, "bcftools/filter": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "bd4e0df3319c171072d09dade42e3c06fa373779", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", + "git_sha": "f7219b428dc69f93aa19f219fb7ce8eae8720400", "installed_by": ["modules"] }, "bcftools/norm": { @@ -77,7 +77,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "4b7d4863a5883b76e6bff13b6e52468fab090c5b", "installed_by": ["modules"] }, "expansionhunter": { @@ -92,7 +92,7 @@ }, "gatk4/annotateintervals": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { @@ -102,22 +102,22 @@ }, "gatk4/collectreadcounts": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", "installed_by": ["modules"] }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "gatk4/determinegermlinecontigploidy": { "branch": "master", - "git_sha": "14c2bbc2def3313b9f1d17fd6194f7c596b40887", + "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", "installed_by": ["modules"] }, "gatk4/filterintervals": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { @@ -127,7 +127,7 @@ }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "ba1ad555be19cb6cedb52c49b21e267b0b7110b7", + "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", "installed_by": ["modules"] }, "gatk4/intervallisttools": { @@ -152,12 +152,12 @@ }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "ba1ad555be19cb6cedb52c49b21e267b0b7110b7", + "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", "installed_by": ["modules"] }, "gatk4/preprocessintervals": { "branch": "master", - "git_sha": "643756685546fa61f5c8fba439af746c090b9180", + "git_sha": "1226419498a14d17f98d12d6488d333b0dbd0418", "installed_by": ["modules"] }, "gatk4/printreads": { diff --git a/modules/nf-core/gatk4/annotateintervals/main.nf b/modules/nf-core/gatk4/annotateintervals/main.nf index 25a3c406..394a6aa0 100644 --- a/modules/nf-core/gatk4/annotateintervals/main.nf +++ b/modules/nf-core/gatk4/annotateintervals/main.nf @@ -5,7 +5,7 @@ process GATK4_ANNOTATEINTERVALS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(intervals) diff --git a/modules/nf-core/gatk4/collectreadcounts/main.nf b/modules/nf-core/gatk4/collectreadcounts/main.nf index f1ef4e0b..ce1985bc 100644 --- a/modules/nf-core/gatk4/collectreadcounts/main.nf +++ b/modules/nf-core/gatk4/collectreadcounts/main.nf @@ -5,14 +5,13 @@ process GATK4_COLLECTREADCOUNTS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: tuple val(meta), path(input), path(input_index), path(intervals) - tuple val(meta), path(fasta) - tuple val(meta), path(fai) - tuple val(meta), path(sequence_dict) - path interval_list + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) + tuple val(meta4), path(dict) output: tuple val(meta), path("*.hdf5"), optional: true, emit: hdf5 diff --git a/modules/nf-core/gatk4/collectreadcounts/meta.yml b/modules/nf-core/gatk4/collectreadcounts/meta.yml index 1dbddc59..938011c1 100644 --- a/modules/nf-core/gatk4/collectreadcounts/meta.yml +++ b/modules/nf-core/gatk4/collectreadcounts/meta.yml @@ -24,11 +24,26 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - bam: + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - input: type: file description: BAM/CRAM/SAM file pattern: "*.{bam,cram,sam}" - - bai: + - input_index: type: file description: BAM/CRAM/SAM index file pattern: "*.{bai,crai,sai}" diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf index 2d630bba..593c8968 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf @@ -1,9 +1,10 @@ + process GATK4_DETERMINEGERMLINECONTIGPLOIDY { tag "$meta.id" label 'process_single' //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 - container "broadinstitute/gatk:4.4.0.0" //Biocontainers is missing a package + container "quay.io/nf-core/gatk:4.4.0.0" //Biocontainers is missing a package // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { @@ -12,27 +13,25 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { input: tuple val(meta), path(counts), path(bed), path(exclude_beds) + tuple val(meta2), path(ploidy_model) path(contig_ploidy_table) - path(ploidy_model) output: - tuple val(meta), path("*-calls.tar.gz") , emit: calls - tuple val(meta), path("*-model.tar.gz") , emit: model, optional: true + tuple val(meta), path("${prefix}-calls"), emit: calls + tuple val(meta), path("${prefix}-model"), emit: model, 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_list = counts.collect(){"--input $it"}.join(" ") - def intervals = bed ? "--intervals ${bed}" : "" - def exclude = exclude_beds ? exclude_beds.collect(){"--exclude-intervals $it"}.join(" ") : "" - def untar_model = ploidy_model ? (ploidy_model.name.endsWith(".tar.gz") ? "tar -xzf ${ploidy_model}" : "") : "" - def tar_model = ploidy_model ? "" : "tar czf ${prefix}-model.tar.gz ${prefix}-model" - def model = ploidy_model ? (ploidy_model.name.endsWith(".tar.gz") ? "--model ${ploidy_model.toString().replace(".tar.gz","")}" : "--model ${ploidy_model}") : "" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" + def intervals = bed ? "--intervals ${bed}" : "" + def exclude = exclude_beds ? exclude_beds.collect(){"--exclude-intervals $it"}.join(" ") : "" def contig_ploidy = contig_ploidy_table ? "--contig-ploidy-priors ${contig_ploidy_table}" : "" + def model = ploidy_model ? "--model ${ploidy_model}" : "" + def input_list = counts.collect(){"--input $it"}.join(" ") def avail_mem = 3072 if (!task.memory) { @@ -41,8 +40,6 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { avail_mem = (task.memory.mega*0.8).intValue() } """ - ${untar_model} - gatk --java-options "-Xmx${avail_mem}M" DetermineGermlineContigPloidy \\ ${input_list} \\ --output ./ \\ @@ -54,9 +51,6 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { --tmp-dir . \\ ${args} - tar czf ${prefix}-calls.tar.gz ${prefix}-calls - ${tar_model} - cat <<-END_VERSIONS > versions.yml "${task.process}": gatk4: \$(echo \$(gatk --version 2>&1) | sed 's/^.*(GATK) v//; s/ .*\$//') @@ -64,12 +58,10 @@ process GATK4_DETERMINEGERMLINECONTIGPLOIDY { """ stub: - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}-calls.tar.gz - touch ${prefix}-model.tar.gz - touch ${prefix}.tsv - touch ${prefix}2.tsv + touch ${prefix}-calls + touch ${prefix}-model cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml index 1a624a5d..667d622e 100644 --- a/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml +++ b/modules/nf-core/gatk4/determinegermlinecontigploidy/meta.yml @@ -22,8 +22,13 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test' ] - counts: - type: file(s) + type: file description: One or more count TSV files created with gatk/collectreadcounts pattern: "*.tsv" - bed: @@ -31,7 +36,7 @@ input: description: Optional - A bed file containing the intervals to include in the process pattern: "*.bed" - exclude_beds: - type: file(s) + type: file description: Optional - One or more bed files containing intervals to exclude from the process pattern: "*.bed" - contig_ploidy_table: @@ -43,8 +48,7 @@ input: description: | Optional - A folder containing the ploidy model. When a model is supplied to tool will run in CASE mode. - The folder can be tar-zipped. - pattern: "*(.tar.gz)?" + pattern: '*-model/' output: - meta: @@ -59,13 +63,13 @@ output: - calls: type: directory description: A folder containing the calls from the input files - pattern: "*.tar.gz" + pattern: "*-calls/" - model: type: directory description: | A folder containing the model from the input files. This will only be created in COHORT mode (when no model is supplied to the process). - pattern: "*.tar.gz" + pattern: "*-model/" authors: - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index f3e7248e..994de794 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/main.nf +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -3,7 +3,7 @@ process GATK4_GERMLINECNVCALLER { label 'process_single' //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 - container "broadinstitute/gatk:4.4.0.0" //Biocontainers is missing a package + container "quay.io/nf-core/gatk:4.4.0.0" //Biocontainers is missing a package // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { @@ -12,28 +12,25 @@ process GATK4_GERMLINECNVCALLER { input: tuple val(meta), path(tsv), path(intervals) - path model - path ploidy + tuple val(meta2), path(model) + tuple val(meta3), path(ploidy) output: - tuple val(meta), path("*-cnv-calls.tar.gz"), emit: calls, optional: true - tuple val(meta), path("*-cnv-model.tar.gz"), emit: model, optional: true - path "versions.yml" , emit: versions + tuple val(meta), path("*-cnv-calls/*-calls"), emit: calls, optional: true + tuple val(meta), path("*-cnv-model/*-model"), emit: model, optional: true + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def intervals_command = intervals ? "--intervals $intervals" : "" - def untar_ploidy = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "tar -xzf ${ploidy}" : "") : "" - def untar_model = model ? (model.name.endsWith(".tar.gz") ? "tar -xzf ${model}" : "") : "" - def ploidy_command = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "--contig-ploidy-calls ${ploidy.toString().replace(".tar.gz","")}" : "--contig-ploidy-calls ${ploidy}") : "" - def model_command = model ? (model.name.endsWith(".tar.gz") ? "--model ${model.toString().replace(".tar.gz","")}/${prefix}-model" : "--model ${model}/${prefix}-model") : "" - def input_list = tsv.collect{"--input $it"}.join(' ') - def output_command = model ? "--output ${prefix}-cnv-calls" : "--output ${prefix}-cnv-model" - def tar_output = model ? "tar -czf ${prefix}-cnv-calls.tar.gz ${prefix}-cnv-calls" : "tar -czf ${prefix}-cnv-model.tar.gz ${prefix}-cnv-model" + def intervals_command = intervals ? "--intervals ${intervals}" : "" + def ploidy_command = ploidy ? "--contig-ploidy-calls ${ploidy}" : "" + def model_command = model ? "--model ${model}" : "" + def input_list = tsv.collect{"--input $it"}.join(' ') + def output_command = model ? "--output ${prefix}-cnv-calls" : "--output ${prefix}-cnv-model" def avail_mem = 3072 if (!task.memory) { @@ -42,9 +39,6 @@ process GATK4_GERMLINECNVCALLER { avail_mem = (task.memory.mega*0.8).intValue() } """ - ${untar_ploidy} - ${untar_model} - gatk --java-options "-Xmx${avail_mem}g" GermlineCNVCaller \\ $input_list \\ $ploidy_command \\ @@ -53,7 +47,6 @@ process GATK4_GERMLINECNVCALLER { $args \\ $intervals_command \\ $model_command - ${tar_output} cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -64,7 +57,8 @@ process GATK4_GERMLINECNVCALLER { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.tar.gz + mkdir -p ${prefix}-cnv-calls/${prefix}-calls + mkdir -p ${prefix}-cnv-model/${prefix}-model cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml index 1574c06a..c4ea7c39 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml +++ b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml @@ -3,6 +3,7 @@ description: Calls copy-number variants in germline samples given their counts a keywords: - gatk - gatk4_germlinecnvcaller + - germline contig ploidy tools: - "gatk4": description: @@ -20,8 +21,18 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - tsv: - type: file(s) + type: file description: One or more count TSV files created with gatk/collectreadcounts pattern: "*.tsv" - intervals: @@ -30,12 +41,12 @@ input: pattern: "*.bed" - model: type: directory - description: Optional - Tar gzipped directory containing the model produced by germlinecnvcaller cohort mode - pattern: "*.tar.gz" + description: Optional - directory containing the model produced by germlinecnvcaller cohort mode + pattern: "*-cnv-model/*-model" - ploidy: type: file - description: Tar gzipped directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode - pattern: "*.tar.gz" + description: directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode + pattern: "*-calls" output: - meta: @@ -50,11 +61,11 @@ output: - calls: type: file description: Tar gzipped directory containing calls produced by germlinecnvcaller case mode - pattern: "*.tar" + pattern: "*-cnv-calls/*-calls" - model: type: directory description: Optional - Tar gzipped directory containing the model produced by germlinecnvcaller cohort mode - pattern: "*.tar.gz" + pattern: "*-cnv-model/*-model" authors: - "@ryanjameskennedy" diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index 9e965107..e72e9c80 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -3,7 +3,7 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { label 'process_single' //Conda is not supported at the moment: https://github.com/broadinstitute/gatk/issues/7811 - container "broadinstitute/gatk:4.4.0.0" //Biocontainers is missing a package + container "quay.io/nf-core/gatk:4.4.0.0" //Biocontainers is missing a package // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { @@ -12,14 +12,14 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { input: tuple val(meta), path(ploidy) - path model - path calls + tuple val(meta2), path(model) + tuple val(meta3), path(calls) output: tuple val(meta), path("*_genotyped_intervals.vcf.gz") , emit: intervals, optional: true tuple val(meta), path("*_genotyped_segments.vcf.gz") , emit: segments, optional: true tuple val(meta), path("*_denoised.vcf.gz") , emit: denoised, optional: true - path "versions.yml" , emit: versions + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -27,12 +27,9 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def untar_ploidy = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "tar -xzf ${ploidy}" : "") : "" - def untar_model = model ? (model.name.endsWith(".tar.gz") ? "tar -xzf ${model}" : "") : "" - def untar_calls = calls ? (calls.name.endsWith(".tar.gz") ? "tar -xzf ${calls}" : "") : "" - def ploidy_command = ploidy ? (ploidy.name.endsWith(".tar.gz") ? "--contig-ploidy-calls ${ploidy.toString().replace(".tar.gz","")}" : "--contig-ploidy-calls ${ploidy}") : "" - def model_command = model ? (model.name.endsWith(".tar.gz") ? "--model-shard-path ${model.toString().replace(".tar.gz","")}/${prefix}-model" : "--model-shard-path ${model}/${prefix}-model") : "" - def calls_command = calls ? (calls.name.endsWith(".tar.gz") ? "--calls-shard-path ${calls.toString().replace(".tar.gz","")}/${prefix}-calls" : "--calls-shard-path ${model}/${prefix}-calls") : "" + def ploidy_command = ploidy ? "--contig-ploidy-calls ${ploidy}" : "" + def model_command = model ? "--model-shard-path ${model}" : "" + def calls_command = calls ? "--calls-shard-path ${calls}" : "" def avail_mem = 3072 if (!task.memory) { @@ -41,10 +38,6 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { avail_mem = (task.memory.mega*0.8).intValue() } """ - ${untar_ploidy} - ${untar_model} - ${untar_calls} - gatk --java-options "-Xmx${avail_mem}g" PostprocessGermlineCNVCalls \\ $ploidy_command \\ $model_command \\ diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml index 60a4c9ef..856e79b6 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml @@ -21,23 +21,32 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] + - meta2: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - meta3: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] - ploidy: type: directory description: | Optional - A folder containing the ploidy model. When a model is supplied to tool will run in CASE mode. - The folder can be tar-zipped. - pattern: "*.tar.gz" + pattern: "*-calls/" - calls: type: directory description: A folder containing the calls from the input files - pattern: "*.tar.gz" + pattern: "*-cnv-calls/*-calls" - model: type: directory description: | A folder containing the model from the input files. This will only be created in COHORT mode (when no model is supplied to the process). - pattern: "*.tar.gz" + pattern: "*-cnv-model/*-model" output: - meta: diff --git a/modules/nf-core/gatk4/preprocessintervals/main.nf b/modules/nf-core/gatk4/preprocessintervals/main.nf index 3edd7068..aff482f7 100644 --- a/modules/nf-core/gatk4/preprocessintervals/main.nf +++ b/modules/nf-core/gatk4/preprocessintervals/main.nf @@ -5,13 +5,14 @@ process GATK4_PREPROCESSINTERVALS { conda "bioconda::gatk4=4.4.0.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" + 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" input: - tuple val(meta), path(exclude_intervals) - path fasta - path fai - path dict + tuple val(meta), path(fasta) + tuple val(meta2), path(fai) + tuple val(meta3), path(dict) + tuple val(meta4), path(intervals) + tuple val(meta5), path(exclude_intervals) output: tuple val(meta), path("*.interval_list"), emit: interval_list @@ -21,8 +22,9 @@ process GATK4_PREPROCESSINTERVALS { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + def include_command = intervals ? "--intervals $intervals" : "" def exclude_command = exclude_intervals ? "--exclude-intervals $exclude_intervals" : "" def avail_mem = 3072 @@ -31,8 +33,10 @@ process GATK4_PREPROCESSINTERVALS { } else { avail_mem = (task.memory.mega*0.8).intValue() } + """ gatk --java-options "-Xmx${avail_mem}M" PreprocessIntervals \\ + $include_command \\ $exclude_command \\ --reference $fasta \\ --output ${prefix}.interval_list \\ diff --git a/modules/nf-core/gatk4/preprocessintervals/meta.yml b/modules/nf-core/gatk4/preprocessintervals/meta.yml index ac61ec4f..8b6ae9b3 100644 --- a/modules/nf-core/gatk4/preprocessintervals/meta.yml +++ b/modules/nf-core/gatk4/preprocessintervals/meta.yml @@ -20,31 +20,55 @@ input: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - exclude_intervals: - type: file - description: Interval file (bed or interval_list) with the genomic regions to be excluded from the analysis (optional) - pattern: "*.{bed,interval_list}" + Groovy Map containing reference information + e.g. [ id:'test' ] - fasta: type: file description: The reference fasta file pattern: "*.fasta" + - meta2: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - fai: type: file description: Index of reference fasta file pattern: "*.fasta.fai" + - meta3: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] - dict: type: file description: GATK sequence dictionary pattern: "*.dict" + - meta4: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - intervals: + type: file + description: Interval file (bed or interval_list) with the genomic regions to be included from the analysis (optional) + pattern: "*.{bed,interval_list}" + - meta5: + type: map + description: | + Groovy Map containing reference information + e.g. [ id:'test' ] + - exclude_intervals: + type: file + description: Interval file (bed or interval_list) with the genomic regions to be excluded from the analysis (optional) + pattern: "*.{bed,interval_list}" output: - meta: type: map description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] + Groovy Map containing reference information + e.g. [ id:'test' ] - versions: type: file description: File containing software versions @@ -57,3 +81,4 @@ output: authors: - "@ryanjameskennedy" - "@ViktorHy" + - "@ramprasadn" From 22135b03f9e99ae9edb444375c21e25e08de7fc5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Jun 2023 14:04:02 +0200 Subject: [PATCH 110/136] rename params --- conf/modules/prepare_references.config | 11 +++++++++++ conf/test.config | 3 +-- conf/test_one_sample.config | 3 +-- main.nf | 3 +-- nextflow_schema.json | 11 +---------- subworkflows/local/call_structural_variants.nf | 5 ++--- subworkflows/local/prepare_references.nf | 7 +++++++ .../variant_calling/call_sv_germlinecnvcaller.nf | 15 +++++++-------- workflows/raredisease.nf | 15 +++++---------- 9 files changed, 36 insertions(+), 37 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index a825250c..267906ef 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -117,4 +117,15 @@ process { enabled: false ] } + + withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WGS' { + ext.args = "--padding 0 --interval-merging-rule OVERLAPPING_ONLY" + ext.when = { params.analysis_type.equals("wgs")} + } + + withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WES' { + ext.args = "--bin-length 0 --interval-merging-rule OVERLAPPING_ONLY" + ext.when = { params.analysis_type.equals("wes")} + } + } diff --git a/conf/test.config b/conf/test.config index c718412d..cb3a1af8 100644 --- a/conf/test.config +++ b/conf/test.config @@ -30,9 +30,8 @@ params { fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" - ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" ploidy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" - cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" + gcnvcaller_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_gcnvcaller_model.tar.gz" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 278b68de..71e704eb 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -34,10 +34,9 @@ params { intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/targetY.interval_list" blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" - cnv_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_cnv_model.tar.gz" + gcnvcaller_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_gcnvcaller_model.tar.gz" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" - ploidy_priors = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_priors.tsv" ploidy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" diff --git a/main.nf b/main.nf index df062d6a..647c0d09 100644 --- a/main.nf +++ b/main.nf @@ -50,9 +50,8 @@ params.vep_cache_version = WorkflowMain.getGenomeAttribute(params, params.gens_interval_list = WorkflowMain.getGenomeAttribute(params, 'gens_interval_list') params.gens_pon = WorkflowMain.getGenomeAttribute(params, 'gens_pon') params.gens_gnomad_pos = WorkflowMain.getGenomeAttribute(params, 'gens_gnomad_pos') -params.ploidy_priors = WorkflowMain.getGenomeAttribute(params, 'ploidy_priors') params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 'ploidy_model') -params.cnv_model = WorkflowMain.getGenomeAttribute(params, 'cnv_model') +params.gcnvcaller_model = WorkflowMain.getGenomeAttribute(params, 'gcnvcaller_model') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/nextflow_schema.json b/nextflow_schema.json index 4ca4b133..72d111de 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -348,15 +348,6 @@ "help_text": "Locations of gnomad SNPs with a high enough BAF.", "hidden": true }, - "ploidy_priors": { - "type": "string", - "fa_icon": "far fa-file-code", - "description": "Contains contig ploidy priors for gatk4's DetermineGermlineContigPloidy", - "hidden": true, - "format": "path", - "default": "None", - "help_text": "When you are generating a ploidy model using GATK4 DetermineGermlineContigPloidy cohort, this path is required." - }, "ploidy_model": { "type": "string", "fa_icon": "fas fa-folder-open", @@ -366,7 +357,7 @@ "default": "None", "help_text": "Produced in GATK4 DetermineGermlineContigPloidy cohort, this model is required for generating a cnv model when using GermlineCNVCaller." }, - "cnv_model": { + "gcnvcaller_model": { "type": "string", "fa_icon": "fas fa-folder-open", "description": "Tar gzipped directory containing the cnv model files", diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 5bcd3c2f..76236d6b 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -21,9 +21,8 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] ch_dict // channel: [ path(dict) ] ch_blacklist_bed // channel: [ path(blacklist_bed) ] - ch_priors // channel: [ path(priors) ] ch_ploidy_model // channel: [ path(ploidy_model) ] - ch_cnv_model // channel: [ path(cnv_model) ] + ch_gcnvcaller_model // channel: [ path(gcnvcaller_model) ] main: ch_versions = Channel.empty() @@ -38,7 +37,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_priors, ch_ploidy_model, ch_cnv_model) + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_ploidy_model, ch_gcnvcaller_model) .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 54160fdc..80f8c51f 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -10,6 +10,8 @@ include { GATK4_BEDTOINTERVALLIST as GATK_BILT } from '../../modul include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD } from '../../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_CREATESEQUENCEDICTIONARY as GATK_SD_MT_SHIFT } from '../../modules/nf-core/gatk4/createsequencedictionary/main' include { GATK4_INTERVALLISTTOOLS as GATK_ILT } from '../../modules/nf-core/gatk4/intervallisttools/main' +include { GATK4_PREPROCESSINTERVALS as GATK_PREPROCESS_WGS } from '../../modules/nf-core/gatk4/preprocessintervals/main.nf' +include { GATK4_PREPROCESSINTERVALS as GATK_PREPROCESS_WES } from '../../modules/nf-core/gatk4/preprocessintervals/main.nf' include { GATK4_SHIFTFASTA as GATK_SHIFTFASTA } from '../../modules/nf-core/gatk4/shiftfasta/main' include { GET_CHROM_SIZES } from '../../modules/local/get_chrom_sizes' include { SAMTOOLS_FAIDX as SAMTOOLS_EXTRACT_MT } from '../../modules/nf-core/samtools/faidx/main' @@ -88,6 +90,9 @@ workflow PREPARE_REFERENCES { CAT_CAT_BAIT ( ch_bait_intervals_cat_in ) UNTAR_VEP_CACHE (ch_vep_cache) + //cnvcalling intervals + GATK_PREPROCESS_WGS (ch_genome_fasta, ch_fai, GATK_SD.out.dict, [[],[]], [[],[]]) + GATK_PREPROCESS_WES (ch_genome_fasta, ch_fai, GATK_SD.out.dict, GATK_BILT.out.interval_list, [[],[]]) // Gather versions ch_versions = ch_versions.mix(BWA_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_GENOME.out.versions) @@ -108,6 +113,8 @@ workflow PREPARE_REFERENCES { ch_versions = ch_versions.mix(GATK_ILT.out.versions) ch_versions = ch_versions.mix(CAT_CAT_BAIT.out.versions) ch_versions = ch_versions.mix(UNTAR_VEP_CACHE.out.versions) + ch_versions = ch_versions.mix(GATK_PREPROCESS_WGS.out.versions) + ch_versions = ch_versions.mix(GATK_PREPROCESS_WES.out.versions) emit: genome_bwa_index = Channel.empty().mix(ch_bwa, ch_sentieonbwa).collect() // channel: [ val(meta), path(index) ] diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index a25313f5..3399cb3c 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -14,21 +14,20 @@ include { GATK4_POSTPROCESSGERMLINECNVCALLS } from '../../../modules/nf-core/g workflow CALL_SV_GERMLINECNVCALLER { take: ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] - ch_fasta_no_meta // channel: [ path(ch_fasta_no_meta) ] - ch_fai // channel: [ path(ch_fai) ] + ch_fasta // channel: [ val(meta), path(ch_fasta_no_meta) ] + ch_fai // channel: [ val(meta), path(ch_fai) ] ch_target_bed // channel: [ val(meta), path(bed), path(tbi) ] ch_blacklist_bed // channel: [ val(meta), path(ch_blacklist_bed) ] - ch_dict // channel: [ path(ch_dict) ] - ch_priors // channel: [ path(ch_priors) ] + ch_dict // channel: [ val(meta), path(ch_dict) ] ch_ploidy_model // channel: [ path(ch_ploidy_model) ] - ch_cnv_model // channel: [ path(ch_cnv_model) ] + ch_gcnvcaller_model // channel: [ path(ch_gcnvcaller_model) ] main: ch_versions = Channel.empty() input = ch_bam_bai.combine( ch_target_bed.collect{ it[1] } ) - GATK4_COLLECTREADCOUNTS ( input, ch_fasta_no_meta, ch_fai, ch_dict, [] ) + GATK4_COLLECTREADCOUNTS ( input, ch_fasta, ch_fai, ch_dict ) dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv .groupTuple() @@ -38,9 +37,9 @@ workflow CALL_SV_GERMLINECNVCALLER { gcnvc_case_input = GATK4_COLLECTREADCOUNTS.out.tsv .groupTuple() .map({ meta, tsv -> return [meta, tsv, [] ]}) - GATK4_GERMLINECNVCALLER ( gcnvc_case_input, ch_cnv_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) + GATK4_GERMLINECNVCALLER ( gcnvc_case_input, ch_gcnvcaller_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) - GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_GERMLINECNVCALLER.out.calls, ch_cnv_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) + GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_GERMLINECNVCALLER.out.calls, ch_gcnvcaller_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) ch_versions = ch_versions.mix(GATK4_COLLECTREADCOUNTS.out.versions) ch_versions = ch_versions.mix(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.versions) diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 116d900f..a9e30013 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -203,16 +203,12 @@ workflow RAREDISEASE { // Gather built indices or get them from the params - ch_blacklist_bed = params.blacklist_bed ? Channel.fromPath(params.blacklist_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() + ch_blacklist_bed = params.blacklist_bed ? Channel.fromPath(params.blacklist_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() : ( ch_references.blacklist_bed ?: Channel.empty() ) - ch_ploidy_priors = params.ploidy_priors ? Channel.fromPath(params.ploidy_priors).collect() - : ( ch_references.ploidy_priors ?: Channel.empty() ) - ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).collect() + ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).collect() : ( ch_references.ploidy_model ?: Channel.empty() ) - ch_cnv_model = params.cnv_model ? Channel.fromPath(params.cnv_model).collect() - : ( ch_references.cnv_model ?: Channel.empty() ) - - + ch_gcnvcaller_model = params.gcnvcaller_model ? Channel.fromPath(params.gcnvcaller_model).collect() + : ( ch_references.gcnvcaller_model ?: Channel.empty() ) ch_bait_intervals = ch_references.bait_intervals ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() @@ -372,9 +368,8 @@ workflow RAREDISEASE { ch_target_bed, ch_genome_dictionary, ch_blacklist_bed, - ch_ploidy_priors, ch_ploidy_model, - ch_cnv_model + ch_gcnvcaller_model ) ch_versions = ch_versions.mix(CALL_STRUCTURAL_VARIANTS.out.versions) From 4cc952775743391368a9d6aa731bc1154c0a5a2c Mon Sep 17 00:00:00 2001 From: asp8200 Date: Thu, 29 Jun 2023 13:01:58 +0000 Subject: [PATCH 111/136] Only publishing compressed vcf from HMTNOTE_ANNOTATE not uncompressed --- conf/modules/merge_annotate_MT.config | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/conf/modules/merge_annotate_MT.config b/conf/modules/merge_annotate_MT.config index 0ca97ca6..027c6805 100644 --- a/conf/modules/merge_annotate_MT.config +++ b/conf/modules/merge_annotate_MT.config @@ -71,10 +71,7 @@ process { ext.prefix = { "${meta.id}_vep_vcfanno_hmtnote_mt" } ext.args = '--offline' publishDir = [ - path: { "${params.outdir}/annotate_mt" }, - mode: params.publish_dir_mode, - pattern: "*{vcf}", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + enabled: false ] } From 0cb3e4e67b9a5231fdf7cc8aaf51099ae284eb86 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Thu, 29 Jun 2023 13:02:28 +0000 Subject: [PATCH 112/136] Removing redundant rename of imported module --- subworkflows/local/mitochondria/merge_annotate_MT.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subworkflows/local/mitochondria/merge_annotate_MT.nf b/subworkflows/local/mitochondria/merge_annotate_MT.nf index eee3f199..8a78ed27 100644 --- a/subworkflows/local/mitochondria/merge_annotate_MT.nf +++ b/subworkflows/local/mitochondria/merge_annotate_MT.nf @@ -16,7 +16,7 @@ include { HAPLOGREP2_CLASSIFY as HAPLOGREP2_CLASSIFY_MT } from '../../.. include { VCFANNO as VCFANNO_MT } from '../../../modules/nf-core/vcfanno/main' include { ANNOTATE_CADD } from '../annotation/annotate_cadd' include { TABIX_BGZIPTABIX as ZIP_TABIX_HMTNOTE } from '../../../modules/nf-core/tabix/bgziptabix/main' -include { HMTNOTE_ANNOTATE as HMTNOTE_ANNOTATE } from '../../../modules/nf-core/hmtnote/annotate/main' +include { HMTNOTE_ANNOTATE } from '../../../modules/nf-core/hmtnote/annotate/main' workflow MERGE_ANNOTATE_MT { take: From 494cfeafec35f88d1808506cd6a9b799248ef227 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 29 Jun 2023 16:25:57 +0200 Subject: [PATCH 113/136] rename channels --- .../local/call_structural_variants.nf | 26 +++++++++---------- .../call_sv_germlinecnvcaller.nf | 22 ++++++++-------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 76236d6b..f8c77aea 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -11,18 +11,18 @@ include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/m workflow CALL_STRUCTURAL_VARIANTS { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam) ] - ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] - ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] - ch_dict // channel: [ path(dict) ] - ch_blacklist_bed // channel: [ path(blacklist_bed) ] - ch_ploidy_model // channel: [ path(ploidy_model) ] - ch_gcnvcaller_model // channel: [ path(gcnvcaller_model) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] + ch_genome_dictionary // channel: [optional; used by mandatory for GATK's cnvcaller][ val(meta), path(dict) ] + ch_blacklist_bed // channel: [optional; used by mandatory for GATK's cnvcaller][ path(blacklist_bed) ] + ch_ploidy_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(ploidy_model) ] + ch_gcnvcaller_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(gcnvcaller_model) ] main: ch_versions = Channel.empty() @@ -37,7 +37,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_target_bed, ch_blacklist_bed, ch_dict, ch_ploidy_model, ch_gcnvcaller_model) + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_target_bed, ch_blacklist_bed, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 3399cb3c..b853fd3c 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -13,26 +13,26 @@ include { GATK4_POSTPROCESSGERMLINECNVCALLS } from '../../../modules/nf-core/g workflow CALL_SV_GERMLINECNVCALLER { take: - ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [ val(meta), path(ch_fasta_no_meta) ] - ch_fai // channel: [ val(meta), path(ch_fai) ] - ch_target_bed // channel: [ val(meta), path(bed), path(tbi) ] - ch_blacklist_bed // channel: [ val(meta), path(ch_blacklist_bed) ] - ch_dict // channel: [ val(meta), path(ch_dict) ] - ch_ploidy_model // channel: [ path(ch_ploidy_model) ] - ch_gcnvcaller_model // channel: [ path(ch_gcnvcaller_model) ] + ch_bam_bai // channel: [mandatory][ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory][ val(meta), path(ch_fasta_no_meta) ] + ch_fai // channel: [mandatory][ val(meta), path(ch_fai) ] + ch_target_bed // channel: [mandatory][ val(meta), path(bed), path(tbi) ] + ch_blacklist_bed // channel: [mandatory][ val(meta), path(ch_blacklist_bed) ] + ch_genome_dictionary // channel: [mandatory][ val(meta), path(ch_dict) ] + ch_ploidy_model // channel: [mandatory][ path(ch_ploidy_model) ] + ch_gcnvcaller_model // channel: [mandatory][ path(ch_gcnvcaller_model) ] main: ch_versions = Channel.empty() input = ch_bam_bai.combine( ch_target_bed.collect{ it[1] } ) - GATK4_COLLECTREADCOUNTS ( input, ch_fasta, ch_fai, ch_dict ) + GATK4_COLLECTREADCOUNTS ( input, ch_fasta, ch_fai, ch_genome_dictionary ) - dgcp_case_input = GATK4_COLLECTREADCOUNTS.out.tsv + ch_dgcp_in = GATK4_COLLECTREADCOUNTS.out.tsv .groupTuple() .map({ meta, tsv -> return [meta, tsv, [], [] ]}) - GATK4_DETERMINEGERMLINECONTIGPLOIDY ( dgcp_case_input, [], ch_ploidy_model ) + GATK4_DETERMINEGERMLINECONTIGPLOIDY ( ch_dgcp_in, [], ch_ploidy_model ) gcnvc_case_input = GATK4_COLLECTREADCOUNTS.out.tsv .groupTuple() From 99c64a3c2cc80c9cd1f456d9821137c1742d1e9b Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Fri, 30 Jun 2023 16:15:21 +0000 Subject: [PATCH 114/136] Template update for nf-core/tools version 2.9 --- .github/CONTRIBUTING.md | 1 - .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/workflows/awsfulltest.yml | 11 +- .github/workflows/awstest.yml | 10 +- .github/workflows/ci.yml | 2 +- .gitpod.yml | 5 + CHANGELOG.md | 2 +- CITATIONS.md | 6 + README.md | 6 +- assets/methods_description_template.yml | 12 +- assets/multiqc_config.yml | 4 +- assets/nf-core-raredisease_logo_light.png | Bin 12342 -> 75763 bytes assets/slackreport.json | 2 +- conf/test_full.config | 2 - docs/usage.md | 6 +- lib/NfcoreSchema.groovy | 530 ---------------------- lib/NfcoreTemplate.groovy | 2 +- lib/WorkflowMain.groovy | 37 -- lib/WorkflowRaredisease.groovy | 45 +- main.nf | 16 + nextflow.config | 54 ++- nextflow_schema.json | 36 +- workflows/raredisease.nf | 25 +- 23 files changed, 177 insertions(+), 639 deletions(-) delete mode 100755 lib/NfcoreSchema.groovy diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 47df952f..76760152 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -116,4 +116,3 @@ To get started: Devcontainer specs: - [DevContainer config](.devcontainer/devcontainer.json) -- [Dockerfile](.devcontainer/Dockerfile) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c6865b29..1c725314 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -42,7 +42,7 @@ body: attributes: label: System information description: | - * Nextflow version _(eg. 22.10.1)_ + * Nextflow version _(eg. 23.04.0)_ * Hardware _(eg. HPC, Desktop, Cloud)_ * Executor _(eg. slurm, local, awsbatch)_ * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, or Apptainer)_ diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml index d777aefd..929ad504 100644 --- a/.github/workflows/awsfulltest.yml +++ b/.github/workflows/awsfulltest.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Launch workflow via tower - uses: seqeralabs/action-tower-launch@v1 + uses: seqeralabs/action-tower-launch@v2 # TODO nf-core: You can customise AWS full pipeline tests as required # Add full size test data (but still relatively small datasets for few samples) # on the `test_full.config` test runs with only one set of parameters @@ -22,13 +22,18 @@ jobs: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + revision: ${{ github.sha }} workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} parameters: | { + "hook_url": "${{ secrets.MEGATESTS_ALERTS_SLACK_HOOK_URL }}", "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-${{ github.sha }}" } - profiles: test_full,aws_tower + profiles: test_full + - uses: actions/upload-artifact@v3 with: name: Tower debug log file - path: tower_action_*.log + path: | + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml index 61ea561e..9a6e057a 100644 --- a/.github/workflows/awstest.yml +++ b/.github/workflows/awstest.yml @@ -12,18 +12,22 @@ jobs: steps: # Launch workflow using Tower CLI tool action - name: Launch workflow via tower - uses: seqeralabs/action-tower-launch@v1 + uses: seqeralabs/action-tower-launch@v2 with: workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }} access_token: ${{ secrets.TOWER_ACCESS_TOKEN }} compute_env: ${{ secrets.TOWER_COMPUTE_ENV }} + revision: ${{ github.sha }} workdir: s3://${{ secrets.AWS_S3_BUCKET }}/work/raredisease/work-${{ github.sha }} parameters: | { "outdir": "s3://${{ secrets.AWS_S3_BUCKET }}/raredisease/results-test-${{ github.sha }}" } - profiles: test,aws_tower + profiles: test + - uses: actions/upload-artifact@v3 with: name: Tower debug log file - path: tower_action_*.log + path: | + tower_action_*.log + tower_action_*.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e83e7cfb..557706b3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,7 +24,7 @@ jobs: strategy: matrix: NXF_VER: - - "22.10.1" + - "23.04.0" - "latest-everything" steps: - name: Check out pipeline code diff --git a/.gitpod.yml b/.gitpod.yml index 85d95ecc..25488dcc 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,4 +1,9 @@ image: nfcore/gitpod:latest +tasks: + - name: Update Nextflow and setup pre-commit + command: | + pre-commit install --install-hooks + nextflow self-update vscode: extensions: # based on nf-core.nf-core-extensionpack diff --git a/CHANGELOG.md b/CHANGELOG.md index 59e6e976..c2ea5e17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0.0 - [date] +## v1.1.0dev - [date] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. diff --git a/CITATIONS.md b/CITATIONS.md index 34d06fe4..5521c755 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -12,7 +12,10 @@ - [FastQC](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/) + > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. Available online https://www.bioinformatics.babraham.ac.uk/projects/fastqc/. + - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) + > Ewels P, Magnusson M, Lundin S, Käller M. MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics. 2016 Oct 1;32(19):3047-8. doi: 10.1093/bioinformatics/btw354. Epub 2016 Jun 16. PubMed PMID: 27312411; PubMed Central PMCID: PMC5039924. ## Software packaging/containerisation tools @@ -31,5 +34,8 @@ - [Docker](https://dl.acm.org/doi/10.5555/2600239.2600241) + > Merkel, D. (2014). Docker: lightweight linux containers for consistent development and deployment. Linux Journal, 2014(239), 2. doi: 10.5555/2600239.2600241. + - [Singularity](https://pubmed.ncbi.nlm.nih.gov/28494014/) + > Kurtzer GM, Sochat V, Bauer MW. Singularity: Scientific containers for mobility of compute. PLoS One. 2017 May 11;12(5):e0177459. doi: 10.1371/journal.pone.0177459. eCollection 2017. PubMed PMID: 28494014; PubMed Central PMCID: PMC5426675. diff --git a/README.md b/README.md index 1d4dabc1..89a39c08 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![AWS CI](https://img.shields.io/badge/CI%20tests-full%20size-FF9900?labelColor=000000&logo=Amazon%20AWS)](https://nf-co.re/raredisease/results)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) -[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A522.10.1-23aa62.svg)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/nextflow%20DSL2-%E2%89%A523.04.0-23aa62.svg)](https://www.nextflow.io/) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -66,11 +66,11 @@ nextflow run nf-core/raredisease \ > provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; > see [docs](https://nf-co.re/usage/configuration#custom-configuration-files). -For more details, please refer to the [usage documentation](https://nf-co.re/raredisease/usage) and the [parameter documentation](https://nf-co.re/raredisease/parameters). +For more details and further functionality, please refer to the [usage documentation](https://nf-co.re/raredisease/usage) and the [parameter documentation](https://nf-co.re/raredisease/parameters). ## Pipeline output -To see the the results of a test run with a full size dataset refer to the [results](https://nf-co.re/raredisease/results) tab on the nf-core website pipeline page. +To see the results of an example test run with a full size dataset refer to the [results](https://nf-co.re/raredisease/results) tab on the nf-core website pipeline page. For more details about the output files and reports, please refer to the [output documentation](https://nf-co.re/raredisease/output). diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index de040a07..e006e44e 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -3,17 +3,21 @@ description: "Suggested text and references to use when describing pipeline usag section_name: "nf-core/raredisease Methods Description" section_href: "https://github.com/nf-core/raredisease" plot_type: "html" -## TODO nf-core: Update the HTML below to your prefered methods description, e.g. add publication citation for this pipeline +## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline ## You inject any metadata in the Nextflow '${workflow}' object data: |

Methods

-

Data was processed using nf-core/raredisease v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020).

+

Data was processed using nf-core/raredisease v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

The pipeline was executed with Nextflow v${workflow.nextflow.version} (Di Tommaso et al., 2017) with the following command:

${workflow.commandLine}
+

${tool_citations}

References

    -
  • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. https://doi.org/10.1038/nbt.3820
  • -
  • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. https://doi.org/10.1038/s41587-020-0439-x
  • +
  • Di Tommaso, P., Chatzou, M., Floden, E. W., Barja, P. P., Palumbo, E., & Notredame, C. (2017). Nextflow enables reproducible computational workflows. Nature Biotechnology, 35(4), 316-319. doi: 10.1038/nbt.3820
  • +
  • Ewels, P. A., Peltzer, A., Fillinger, S., Patel, H., Alneberg, J., Wilm, A., Garcia, M. U., Di Tommaso, P., & Nahnsen, S. (2020). The nf-core framework for community-curated bioinformatics pipelines. Nature Biotechnology, 38(3), 276-278. doi: 10.1038/s41587-020-0439-x
  • +
  • Grüning, B., Dale, R., Sjödin, A., Chapman, B. A., Rowe, J., Tomkins-Tinch, C. H., Valieris, R., Köster, J., & Bioconda Team. (2018). Bioconda: sustainable and comprehensive software distribution for the life sciences. Nature Methods, 15(7), 475–476. doi: 10.1038/s41592-018-0046-7
  • +
  • da Veiga Leprevost, F., Grüning, B. A., Alves Aflitos, S., Röst, H. L., Uszkoreit, J., Barsnes, H., Vaudel, M., Moreno, P., Gatto, L., Weber, J., Bai, M., Jimenez, R. C., Sachsenberg, T., Pfeuffer, J., Vera Alvarez, R., Griss, J., Nesvizhskii, A. I., & Perez-Riverol, Y. (2017). BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics (Oxford, England), 33(16), 2580–2582. doi: 10.1093/bioinformatics/btx192
  • + ${tool_bibliography}
Notes:
diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index 3f45252a..86bf2453 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,7 +1,7 @@ report_comment: > - This report has been generated by the nf-core/raredisease + This report has been generated by the nf-core/raredisease analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-raredisease-methods-description": order: -1000 diff --git a/assets/nf-core-raredisease_logo_light.png b/assets/nf-core-raredisease_logo_light.png index 0b66df05f45385dd4da8e4b17bf78e71a001f259..3e1c6ec69ad091015a8df756efd4bfee1d337628 100644 GIT binary patch literal 75763 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

jx_Ry)!8|d-JebNGaGDW1#(O_I4hx;bM}V(| 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%0DMRcN%I3ej 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 } else { %>danger<%} %>", - "author_name": "sanger-tol/readmapping v${version} - ${runName}", + "author_name": "nf-core/raredisease v${version} - ${runName}", "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", "fields": [ diff --git a/conf/test_full.config b/conf/test_full.config index 9dd4f763..a33b4721 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -10,8 +10,6 @@ ---------------------------------------------------------------------------------------- */ -cleanup = true - params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' diff --git a/docs/usage.md b/docs/usage.md index 94e500a7..44c2a9c9 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -57,7 +57,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run nf-core/raredisease --input samplesheet.csv --outdir --genome GRCh37 -profile docker +nextflow run nf-core/raredisease --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -76,7 +76,8 @@ If you wish to repeatedly use the same parameters for multiple runs, rather than Pipeline settings can be provided in a `yaml` or `json` file via `-params-file `. > ⚠️ Do not use `-c ` to specify parameters as this will result in errors. Custom config files specified with `-c` must only be used for [tuning process resource specifications](https://nf-co.re/docs/usage/configuration#tuning-workflow-resources), other infrastructural tweaks (such as output directories), or module arguments (args). -> The above pipeline run specified with a params file in yaml format: + +The above pipeline run specified with a params file in yaml format: ```bash nextflow run nf-core/raredisease -profile docker -params-file params.yaml @@ -88,7 +89,6 @@ with `params.yaml` containing: input: './samplesheet.csv' outdir: './results/' genome: 'GRCh37' -input: 'data' <...> ``` diff --git a/lib/NfcoreSchema.groovy b/lib/NfcoreSchema.groovy deleted file mode 100755 index 9b34804d..00000000 --- a/lib/NfcoreSchema.groovy +++ /dev/null @@ -1,530 +0,0 @@ -// -// This file holds several functions used to perform JSON parameter validation, help and summary rendering for the nf-core pipeline template. -// - -import nextflow.Nextflow -import org.everit.json.schema.Schema -import org.everit.json.schema.loader.SchemaLoader -import org.everit.json.schema.ValidationException -import org.json.JSONObject -import org.json.JSONTokener -import org.json.JSONArray -import groovy.json.JsonSlurper -import groovy.json.JsonBuilder - -class NfcoreSchema { - - // - // Resolve Schema path relative to main workflow directory - // - public static String getSchemaPath(workflow, schema_filename='nextflow_schema.json') { - return "${workflow.projectDir}/${schema_filename}" - } - - // - // Function to loop over all parameters defined in schema and check - // whether the given parameters adhere to the specifications - // - /* groovylint-disable-next-line UnusedPrivateMethodParameter */ - public static void validateParameters(workflow, params, log, schema_filename='nextflow_schema.json') { - def has_error = false - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// - // Check for nextflow core params and unexpected params - def json = new File(getSchemaPath(workflow, schema_filename=schema_filename)).text - def Map schemaParams = (Map) new JsonSlurper().parseText(json).get('definitions') - def nf_params = [ - // Options for base `nextflow` command - 'bg', - 'c', - 'C', - 'config', - 'd', - 'D', - 'dockerize', - 'h', - 'log', - 'q', - 'quiet', - 'syslog', - 'v', - - // Options for `nextflow run` command - 'ansi', - 'ansi-log', - 'bg', - 'bucket-dir', - 'c', - 'cache', - 'config', - 'dsl2', - 'dump-channels', - 'dump-hashes', - 'E', - 'entry', - 'latest', - 'lib', - 'main-script', - 'N', - 'name', - 'offline', - 'params-file', - 'pi', - 'plugins', - 'poll-interval', - 'pool-size', - 'profile', - 'ps', - 'qs', - 'queue-size', - 'r', - 'resume', - 'revision', - 'stdin', - 'stub', - 'stub-run', - 'test', - 'w', - 'with-apptainer', - 'with-charliecloud', - 'with-conda', - 'with-dag', - 'with-docker', - 'with-mpi', - 'with-notification', - 'with-podman', - 'with-report', - 'with-singularity', - 'with-timeline', - 'with-tower', - 'with-trace', - 'with-weblog', - 'without-docker', - 'without-podman', - 'work-dir' - ] - def unexpectedParams = [] - - // Collect expected parameters from the schema - def expectedParams = [] - def enums = [:] - for (group in schemaParams) { - for (p in group.value['properties']) { - expectedParams.push(p.key) - if (group.value['properties'][p.key].containsKey('enum')) { - enums[p.key] = group.value['properties'][p.key]['enum'] - } - } - } - - for (specifiedParam in params.keySet()) { - // nextflow params - if (nf_params.contains(specifiedParam)) { - log.error "ERROR: You used a core Nextflow option with two hyphens: '--${specifiedParam}'. Please resubmit with '-${specifiedParam}'" - has_error = true - } - // unexpected params - def params_ignore = params.schema_ignore_params.split(',') + 'schema_ignore_params' - def expectedParamsLowerCase = expectedParams.collect{ it.replace("-", "").toLowerCase() } - def specifiedParamLowerCase = specifiedParam.replace("-", "").toLowerCase() - def isCamelCaseBug = (specifiedParam.contains("-") && !expectedParams.contains(specifiedParam) && expectedParamsLowerCase.contains(specifiedParamLowerCase)) - if (!expectedParams.contains(specifiedParam) && !params_ignore.contains(specifiedParam) && !isCamelCaseBug) { - // Temporarily remove camelCase/camel-case params #1035 - def unexpectedParamsLowerCase = unexpectedParams.collect{ it.replace("-", "").toLowerCase()} - if (!unexpectedParamsLowerCase.contains(specifiedParamLowerCase)){ - unexpectedParams.push(specifiedParam) - } - } - } - - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// - // Validate parameters against the schema - InputStream input_stream = new File(getSchemaPath(workflow, schema_filename=schema_filename)).newInputStream() - JSONObject raw_schema = new JSONObject(new JSONTokener(input_stream)) - - // Remove anything that's in params.schema_ignore_params - raw_schema = removeIgnoredParams(raw_schema, params) - - Schema schema = SchemaLoader.load(raw_schema) - - // Clean the parameters - def cleanedParams = cleanParameters(params) - - // Convert to JSONObject - def jsonParams = new JsonBuilder(cleanedParams) - JSONObject params_json = new JSONObject(jsonParams.toString()) - - // Validate - try { - schema.validate(params_json) - } catch (ValidationException e) { - println '' - log.error 'ERROR: Validation of pipeline parameters failed!' - JSONObject exceptionJSON = e.toJSON() - printExceptions(exceptionJSON, params_json, log, enums) - println '' - has_error = true - } - - // Check for unexpected parameters - if (unexpectedParams.size() > 0) { - Map colors = NfcoreTemplate.logColours(params.monochrome_logs) - println '' - def warn_msg = 'Found unexpected parameters:' - for (unexpectedParam in unexpectedParams) { - warn_msg = warn_msg + "\n* --${unexpectedParam}: ${params[unexpectedParam].toString()}" - } - log.warn warn_msg - log.info "- ${colors.dim}Ignore this warning: params.schema_ignore_params = \"${unexpectedParams.join(',')}\" ${colors.reset}" - println '' - } - - if (has_error) { - Nextflow.error('Exiting!') - } - } - - // - // Beautify parameters for --help - // - public static String paramsHelp(workflow, params, command, schema_filename='nextflow_schema.json') { - Map colors = NfcoreTemplate.logColours(params.monochrome_logs) - Integer num_hidden = 0 - String output = '' - output += 'Typical pipeline command:\n\n' - output += " ${colors.cyan}${command}${colors.reset}\n\n" - Map params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) - Integer max_chars = paramsMaxChars(params_map) + 1 - Integer desc_indent = max_chars + 14 - Integer dec_linewidth = 160 - desc_indent - for (group in params_map.keySet()) { - Integer num_params = 0 - String group_output = colors.underlined + colors.bold + group + colors.reset + '\n' - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (group_params.get(param).hidden && !params.show_hidden_params) { - num_hidden += 1 - continue; - } - def type = '[' + group_params.get(param).type + ']' - def description = group_params.get(param).description - def defaultValue = group_params.get(param).default != null ? " [default: " + group_params.get(param).default.toString() + "]" : '' - def description_default = description + colors.dim + defaultValue + colors.reset - // Wrap long description texts - // Loosely based on https://dzone.com/articles/groovy-plain-text-word-wrap - if (description_default.length() > dec_linewidth){ - List olines = [] - String oline = "" // " " * indent - description_default.split(" ").each() { wrd -> - if ((oline.size() + wrd.size()) <= dec_linewidth) { - oline += wrd + " " - } else { - olines += oline - oline = wrd + " " - } - } - olines += oline - description_default = olines.join("\n" + " " * desc_indent) - } - group_output += " --" + param.padRight(max_chars) + colors.dim + type.padRight(10) + colors.reset + description_default + '\n' - num_params += 1 - } - group_output += '\n' - if (num_params > 0){ - output += group_output - } - } - if (num_hidden > 0){ - output += colors.dim + "!! Hiding $num_hidden params, use --show_hidden_params to show them !!\n" + colors.reset - } - output += NfcoreTemplate.dashedLine(params.monochrome_logs) - return output - } - - // - // Groovy Map summarising parameters/workflow options used by the pipeline - // - public static LinkedHashMap paramsSummaryMap(workflow, params, schema_filename='nextflow_schema.json') { - // Get a selection of core Nextflow workflow options - def Map workflow_summary = [:] - if (workflow.revision) { - workflow_summary['revision'] = workflow.revision - } - workflow_summary['runName'] = workflow.runName - if (workflow.containerEngine) { - workflow_summary['containerEngine'] = workflow.containerEngine - } - if (workflow.container) { - workflow_summary['container'] = workflow.container - } - workflow_summary['launchDir'] = workflow.launchDir - workflow_summary['workDir'] = workflow.workDir - workflow_summary['projectDir'] = workflow.projectDir - workflow_summary['userName'] = workflow.userName - workflow_summary['profile'] = workflow.profile - workflow_summary['configFiles'] = workflow.configFiles.join(', ') - - // Get pipeline parameters defined in JSON Schema - def Map params_summary = [:] - def params_map = paramsLoad(getSchemaPath(workflow, schema_filename=schema_filename)) - for (group in params_map.keySet()) { - def sub_params = new LinkedHashMap() - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (params.containsKey(param)) { - def params_value = params.get(param) - def schema_value = group_params.get(param).default - def param_type = group_params.get(param).type - if (schema_value != null) { - if (param_type == 'string') { - if (schema_value.contains('$projectDir') || schema_value.contains('${projectDir}')) { - def sub_string = schema_value.replace('\$projectDir', '') - sub_string = sub_string.replace('\${projectDir}', '') - if (params_value.contains(sub_string)) { - schema_value = params_value - } - } - if (schema_value.contains('$params.outdir') || schema_value.contains('${params.outdir}')) { - def sub_string = schema_value.replace('\$params.outdir', '') - sub_string = sub_string.replace('\${params.outdir}', '') - if ("${params.outdir}${sub_string}" == params_value) { - schema_value = params_value - } - } - } - } - - // We have a default in the schema, and this isn't it - if (schema_value != null && params_value != schema_value) { - sub_params.put(param, params_value) - } - // No default in the schema, and this isn't empty - else if (schema_value == null && params_value != "" && params_value != null && params_value != false) { - sub_params.put(param, params_value) - } - } - } - params_summary.put(group, sub_params) - } - return [ 'Core Nextflow options' : workflow_summary ] << params_summary - } - - // - // Beautify parameters for summary and return as string - // - public static String paramsSummaryLog(workflow, params) { - Map colors = NfcoreTemplate.logColours(params.monochrome_logs) - String output = '' - def params_map = paramsSummaryMap(workflow, params) - def max_chars = paramsMaxChars(params_map) - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - if (group_params) { - output += colors.bold + group + colors.reset + '\n' - for (param in group_params.keySet()) { - output += " " + colors.blue + param.padRight(max_chars) + ": " + colors.green + group_params.get(param) + colors.reset + '\n' - } - output += '\n' - } - } - output += "!! Only displaying parameters that differ from the pipeline defaults !!\n" - output += NfcoreTemplate.dashedLine(params.monochrome_logs) - return output - } - - // - // Loop over nested exceptions and print the causingException - // - private static void printExceptions(ex_json, params_json, log, enums, limit=5) { - def causingExceptions = ex_json['causingExceptions'] - if (causingExceptions.length() == 0) { - def m = ex_json['message'] =~ /required key \[([^\]]+)\] not found/ - // Missing required param - if (m.matches()) { - log.error "* Missing required parameter: --${m[0][1]}" - } - // Other base-level error - else if (ex_json['pointerToViolation'] == '#') { - log.error "* ${ex_json['message']}" - } - // Error with specific param - else { - def param = ex_json['pointerToViolation'] - ~/^#\// - def param_val = params_json[param].toString() - if (enums.containsKey(param)) { - def error_msg = "* --${param}: '${param_val}' is not a valid choice (Available choices" - if (enums[param].size() > limit) { - log.error "${error_msg} (${limit} of ${enums[param].size()}): ${enums[param][0..limit-1].join(', ')}, ... )" - } else { - log.error "${error_msg}: ${enums[param].join(', ')})" - } - } else { - log.error "* --${param}: ${ex_json['message']} (${param_val})" - } - } - } - for (ex in causingExceptions) { - printExceptions(ex, params_json, log, enums) - } - } - - // - // Remove an element from a JSONArray - // - private static JSONArray removeElement(json_array, element) { - def list = [] - int len = json_array.length() - for (int i=0;i - if(raw_schema.keySet().contains('definitions')){ - raw_schema.definitions.each { definition -> - for (key in definition.keySet()){ - if (definition[key].get("properties").keySet().contains(ignore_param)){ - // Remove the param to ignore - definition[key].get("properties").remove(ignore_param) - // If the param was required, change this - if (definition[key].has("required")) { - def cleaned_required = removeElement(definition[key].required, ignore_param) - definition[key].put("required", cleaned_required) - } - } - } - } - } - if(raw_schema.keySet().contains('properties') && raw_schema.get('properties').keySet().contains(ignore_param)) { - raw_schema.get("properties").remove(ignore_param) - } - if(raw_schema.keySet().contains('required') && raw_schema.required.contains(ignore_param)) { - def cleaned_required = removeElement(raw_schema.required, ignore_param) - raw_schema.put("required", cleaned_required) - } - } - return raw_schema - } - - // - // Clean and check parameters relative to Nextflow native classes - // - private static Map cleanParameters(params) { - def new_params = params.getClass().newInstance(params) - for (p in params) { - // remove anything evaluating to false - if (!p['value']) { - new_params.remove(p.key) - } - // Cast MemoryUnit to String - if (p['value'].getClass() == nextflow.util.MemoryUnit) { - new_params.replace(p.key, p['value'].toString()) - } - // Cast Duration to String - if (p['value'].getClass() == nextflow.util.Duration) { - new_params.replace(p.key, p['value'].toString().replaceFirst(/d(?!\S)/, "day")) - } - // Cast LinkedHashMap to String - if (p['value'].getClass() == LinkedHashMap) { - new_params.replace(p.key, p['value'].toString()) - } - } - return new_params - } - - // - // This function tries to read a JSON params file - // - private static LinkedHashMap paramsLoad(String json_schema) { - def params_map = new LinkedHashMap() - try { - params_map = paramsRead(json_schema) - } catch (Exception e) { - println "Could not read parameters settings from JSON. $e" - params_map = new LinkedHashMap() - } - return params_map - } - - // - // Method to actually read in JSON file using Groovy. - // Group (as Key), values are all parameters - // - Parameter1 as Key, Description as Value - // - Parameter2 as Key, Description as Value - // .... - // Group - // - - private static LinkedHashMap paramsRead(String json_schema) throws Exception { - def json = new File(json_schema).text - def Map schema_definitions = (Map) new JsonSlurper().parseText(json).get('definitions') - def Map schema_properties = (Map) new JsonSlurper().parseText(json).get('properties') - /* Tree looks like this in nf-core schema - * definitions <- this is what the first get('definitions') gets us - group 1 - title - description - properties - parameter 1 - type - description - parameter 2 - type - description - group 2 - title - description - properties - parameter 1 - type - description - * properties <- parameters can also be ungrouped, outside of definitions - parameter 1 - type - description - */ - - // Grouped params - def params_map = new LinkedHashMap() - schema_definitions.each { key, val -> - def Map group = schema_definitions."$key".properties // Gets the property object of the group - def title = schema_definitions."$key".title - def sub_params = new LinkedHashMap() - group.each { innerkey, value -> - sub_params.put(innerkey, value) - } - params_map.put(title, sub_params) - } - - // Ungrouped params - def ungrouped_params = new LinkedHashMap() - schema_properties.each { innerkey, value -> - ungrouped_params.put(innerkey, value) - } - params_map.put("Other parameters", ungrouped_params) - - return params_map - } - - // - // Get maximum number of characters across all parameter names - // - private static Integer paramsMaxChars(params_map) { - Integer max_chars = 0 - for (group in params_map.keySet()) { - def group_params = params_map.get(group) // This gets the parameters of that particular group - for (param in group_params.keySet()) { - if (param.size() > max_chars) { - max_chars = param.size() - } - } - } - return max_chars - } -} diff --git a/lib/NfcoreTemplate.groovy b/lib/NfcoreTemplate.groovy index 25a0a74a..408951ae 100755 --- a/lib/NfcoreTemplate.groovy +++ b/lib/NfcoreTemplate.groovy @@ -128,7 +128,7 @@ class NfcoreTemplate { def email_html = html_template.toString() // Render the sendmail template - def max_multiqc_email_size = params.max_multiqc_email_size as nextflow.util.MemoryUnit + def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as nextflow.util.MemoryUnit def smail_fields = [ email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "$projectDir", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes() ] def sf = new File("$projectDir/assets/sendmail_template.txt") def sendmail_template = engine.createTemplate(sf).make(smail_fields) diff --git a/lib/WorkflowMain.groovy b/lib/WorkflowMain.groovy index 902b3be4..748bba19 100755 --- a/lib/WorkflowMain.groovy +++ b/lib/WorkflowMain.groovy @@ -20,40 +20,11 @@ class WorkflowMain { " https://github.com/${workflow.manifest.name}/blob/master/CITATIONS.md" } - // - // Generate help string - // - public static String help(workflow, params) { - def command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" - def help_string = '' - help_string += NfcoreTemplate.logo(workflow, params.monochrome_logs) - help_string += NfcoreSchema.paramsHelp(workflow, params, command) - help_string += '\n' + citation(workflow) + '\n' - help_string += NfcoreTemplate.dashedLine(params.monochrome_logs) - return help_string - } - - // - // Generate parameter summary log string - // - public static String paramsSummaryLog(workflow, params) { - def summary_log = '' - summary_log += NfcoreTemplate.logo(workflow, params.monochrome_logs) - summary_log += NfcoreSchema.paramsSummaryLog(workflow, params) - summary_log += '\n' + citation(workflow) + '\n' - summary_log += NfcoreTemplate.dashedLine(params.monochrome_logs) - return summary_log - } // // Validate parameters and print summary to screen // public static void initialise(workflow, params, log) { - // Print help to screen if required - if (params.help) { - log.info help(workflow, params) - System.exit(0) - } // Print workflow version and exit on --version if (params.version) { @@ -62,14 +33,6 @@ class WorkflowMain { System.exit(0) } - // Print parameter summary log to screen - log.info paramsSummaryLog(workflow, params) - - // Validate workflow parameters via the JSON schema - if (params.validate_params) { - NfcoreSchema.validateParameters(workflow, params, log) - } - // Check that a -profile or Nextflow config has been provided to run the pipeline NfcoreTemplate.checkConfigProvided(workflow, log) diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index b4f3b6d8..48f8bb4d 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -11,6 +11,7 @@ class WorkflowRaredisease { // Check and validate parameters // public static void initialise(params, log) { + genomeExistsError(params, log) @@ -46,15 +47,57 @@ class WorkflowRaredisease { return yaml_file_text } - public static String methodsDescriptionText(run_workflow, mqc_methods_yaml) { + // + // Generate methods description for MultiQC + // + + public static String toolCitationText(params) { + + // TODO Optionally add in-text citation tools to this list. + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "", + // Uncomment function in methodsDescriptionText to render in MultiQC report + def citation_text = [ + "Tools used in the workflow included:", + "FastQC (Andrews 2010),", + "MultiQC (Ewels et al. 2016)", + "." + ].join(' ').trim() + + return citation_text + } + + public static String toolBibliographyText(params) { + + // TODO Optionally add bibliographic entries to this list. + // Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "

  • Author (2023) Pub name, Journal, DOI
  • " : "", + // Uncomment function in methodsDescriptionText to render in MultiQC report + def reference_text = [ + "
  • Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/).
  • ", + "
  • Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354
  • " + ].join(' ').trim() + + return reference_text + } + + public static String methodsDescriptionText(run_workflow, mqc_methods_yaml, params) { // Convert to a named map so can be used as with familar NXF ${workflow} variable syntax in the MultiQC YML file def meta = [:] meta.workflow = run_workflow.toMap() meta["manifest_map"] = run_workflow.manifest.toMap() + // Pipeline DOI meta["doi_text"] = meta.manifest_map.doi ? "(doi:
    ${meta.manifest_map.doi})" : "" meta["nodoi_text"] = meta.manifest_map.doi ? "": "
  • If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used.
  • " + // Tool references + meta["tool_citations"] = "" + meta["tool_bibliography"] = "" + + // TODO Only uncomment below if logic in toolCitationText/toolBibliographyText has been filled! + //meta["tool_citations"] = toolCitationText(params).replaceAll(", \\.", ".").replaceAll("\\. \\.", ".").replaceAll(", \\.", ".") + //meta["tool_bibliography"] = toolBibliographyText(params) + + def methods_text = mqc_methods_yaml.text def engine = new SimpleTemplateEngine() diff --git a/main.nf b/main.nf index 25e7ee5d..bb816f0c 100644 --- a/main.nf +++ b/main.nf @@ -25,6 +25,22 @@ params.fasta = WorkflowMain.getGenomeAttribute(params, 'fasta') ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ +include { validateParameters; paramsHelp } from 'plugin/nf-validation' + +// Print help message if needed +if (params.help) { + def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) + def citation = '\n' + WorkflowMain.citation(workflow) + '\n' + def String command = "nextflow run ${workflow.manifest.name} --input samplesheet.csv --genome GRCh37 -profile docker" + log.info logo + paramsHelp(command) + citation + NfcoreTemplate.dashedLine(params.monochrome_logs) + System.exit(0) +} + +// Validate input parameters +if (params.validate_params) { + validateParameters() +} + WorkflowMain.initialise(workflow, params, log) /* diff --git a/nextflow.config b/nextflow.config index e15d3d7e..205afed0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -12,12 +12,12 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options input = null - - // References genome = null igenomes_base = 's3://ngi-igenomes/igenomes' igenomes_ignore = false + + // MultiQC options multiqc_config = null multiqc_title = null @@ -27,7 +27,6 @@ params { // Boilerplate options outdir = null - tracedir = "${params.outdir}/pipeline_info" publish_dir_mode = 'copy' email = null email_on_fail = null @@ -36,19 +35,15 @@ params { hook_url = null help = false version = false - validate_params = true - show_hidden_params = false - schema_ignore_params = 'genomes' - // Config options + config_profile_name = null + config_profile_description = null custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_description = null config_profile_contact = null config_profile_url = null - config_profile_name = null - + // Max resource options // Defaults only, expecting to be overwritten @@ -56,6 +51,13 @@ params { max_cpus = 16 max_time = '240.h' + // Schema validation default options + validationFailUnrecognisedParams = false + validationLenientMode = false + validationSchemaIgnoreParams = 'genomes' + validationShowHiddenParams = false + validate_params = true + } // Load base.config by default for all pipelines @@ -75,13 +77,11 @@ try { // } catch (Exception e) { // System.err.println("WARNING: Could not load nf-core/config/raredisease profiles: ${params.custom_config_base}/pipeline/raredisease.config") // } - - profiles { debug { dumpHashes = true process.beforeScript = 'echo $HOSTNAME' - cleanup = false + cleanup = false } conda { conda.enabled = true @@ -104,7 +104,6 @@ profiles { } docker { docker.enabled = true - docker.registry = 'quay.io' docker.userEmulation = true conda.enabled = false singularity.enabled = false @@ -128,7 +127,6 @@ profiles { } podman { podman.enabled = true - podman.registry = 'quay.io' conda.enabled = false docker.enabled = false singularity.enabled = false @@ -172,6 +170,18 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } +// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' + +// Nextflow plugins +plugins { + id 'nf-validation' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} // Load igenomes.config if required if (!params.igenomes_ignore) { @@ -179,8 +189,6 @@ if (!params.igenomes_ignore) { } else { params.genomes = [:] } - - // Export these variables to prevent local Python/R libraries from conflicting with those in the container // The JULIA depot path has been adjusted to a fixed path `/usr/local/share/julia` that needs to be used for packages in the container. // See https://apeltzer.github.io/post/03-julia-lang-nextflow/ for details on that. Once we have a common agreement on where to keep Julia packages, this is adjustable. @@ -198,19 +206,19 @@ process.shell = ['/bin/bash', '-euo', 'pipefail'] def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" } report { enabled = true - file = "${params.tracedir}/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" } trace { enabled = true - file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" } dag { enabled = true - file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" } manifest { @@ -219,8 +227,8 @@ manifest { homePage = 'https://github.com/nf-core/raredisease' description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' - nextflowVersion = '!>=22.10.1' - version = '1.0.0' + nextflowVersion = '!>=23.04.0' + version = '1.1.0dev' doi = '' } diff --git a/nextflow_schema.json b/nextflow_schema.json index d6d969ef..c6129738 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -15,9 +15,9 @@ "input": { "type": "string", "format": "file-path", + "exists": true, "mimetype": "text/csv", "pattern": "^\\S+\\.csv$", - "schema": "assets/schema_input.json", "description": "Path to comma-separated file containing information about the samples in the experiment.", "help_text": "You will need to create a design file with information about the samples in your experiment before running the pipeline. Use this parameter to specify its location. It has to be a comma-separated file with 3 columns, and a header row. See [usage docs](https://nf-co.re/raredisease/usage#samplesheet-input).", "fa_icon": "fas fa-file-csv" @@ -57,6 +57,7 @@ "fasta": { "type": "string", "format": "file-path", + "exists": true, "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", @@ -157,7 +158,7 @@ "description": "Maximum amount of time that can be requested for any single job.", "default": "240.h", "fa_icon": "far fa-clock", - "pattern": "^(\\d+\\.?\\s*(s|m|h|day)\\s*)+$", + "pattern": "^(\\d+\\.?\\s*(s|m|h|d|day)\\s*)+$", "hidden": true, "help_text": "Use to set an upper-limit for the time requirement for each process. Should be a string in the format integer-unit e.g. `--max_time '2.h'`" } @@ -174,12 +175,14 @@ "type": "boolean", "description": "Display help text.", "fa_icon": "fas fa-question-circle", + "default": false, "hidden": true }, "version": { "type": "boolean", "description": "Display version and exit.", "fa_icon": "fas fa-question-circle", + "default": false, "hidden": true }, "publish_dir_mode": { @@ -203,6 +206,7 @@ "type": "boolean", "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", + "default": false, "hidden": true }, "max_multiqc_email_size": { @@ -217,6 +221,7 @@ "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", + "default": false, "hidden": true }, "hook_url": { @@ -228,6 +233,7 @@ }, "multiqc_config": { "type": "string", + "format": "file-path", "description": "Custom config file to supply to MultiQC.", "fa_icon": "fas fa-cog", "hidden": true @@ -243,13 +249,6 @@ "description": "Custom MultiQC yaml file containing HTML including a methods description.", "fa_icon": "fas fa-cog" }, - "tracedir": { - "type": "string", - "description": "Directory to keep pipeline Nextflow logs and reports.", - "default": "${params.outdir}/pipeline_info", - "fa_icon": "fas fa-cogs", - "hidden": true - }, "validate_params": { "type": "boolean", "description": "Boolean whether to validate parameters against the schema at runtime", @@ -257,12 +256,29 @@ "fa_icon": "fas fa-check-square", "hidden": true }, - "show_hidden_params": { + "validationShowHiddenParams": { "type": "boolean", "fa_icon": "far fa-eye-slash", "description": "Show all params when using `--help`", + "default": false, "hidden": true, "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." + }, + "validationFailUnrecognisedParams": { + "type": "boolean", + "fa_icon": "far fa-check-circle", + "description": "Validation of parameters fails when an unrecognised parameter is found.", + "default": false, + "hidden": true, + "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." + }, + "validationLenientMode": { + "type": "boolean", + "fa_icon": "far fa-check-circle", + "description": "Validation of parameters in lenient more.", + "default": false, + "hidden": true, + "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." } } } diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index f2260629..604e25af 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -1,21 +1,19 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - VALIDATE INPUTS + PRINT PARAMS SUMMARY ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -def summary_params = NfcoreSchema.paramsSummaryMap(workflow, params) +include { paramsSummaryLog; paramsSummaryMap } from 'plugin/nf-validation' -// Validate input parameters -WorkflowRaredisease.initialise(params, log) +def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) +def citation = '\n' + WorkflowMain.citation(workflow) + '\n' +def summary_params = paramsSummaryMap(workflow) -// TODO nf-core: Add all file path parameters for the pipeline to the list below -// Check input path parameters to see if they exist -def checkPathParamList = [ params.input, params.multiqc_config, params.fasta ] -for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } +// Print parameter summary log to screen +log.info logo + paramsSummaryLog(workflow) + citation -// Check mandatory parameters -if (params.input) { ch_input = file(params.input) } else { exit 1, 'Input samplesheet not specified!' } +WorkflowRaredisease.initialise(params, log) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -69,9 +67,12 @@ workflow RAREDISEASE { // SUBWORKFLOW: Read in samplesheet, validate and stage input files // INPUT_CHECK ( - ch_input + file(params.input) ) ch_versions = ch_versions.mix(INPUT_CHECK.out.versions) + // TODO: OPTIONAL, you can use nf-validation plugin to create an input channel from the samplesheet with Channel.fromSamplesheet("input") + // See the documentation https://nextflow-io.github.io/nf-validation/samplesheets/fromSamplesheet/ + // ! There is currently no tooling to help you write a sample sheet schema // // MODULE: Run FastQC @@ -91,7 +92,7 @@ workflow RAREDISEASE { workflow_summary = WorkflowRaredisease.paramsSummaryMultiqc(workflow, summary_params) ch_workflow_summary = Channel.value(workflow_summary) - methods_description = WorkflowRaredisease.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description) + methods_description = WorkflowRaredisease.methodsDescriptionText(workflow, ch_multiqc_custom_methods_description, params) ch_methods_description = Channel.value(methods_description) ch_multiqc_files = Channel.empty() From d93c45b0f86764c4b8d9961ab980e09405362c27 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Jul 2023 15:52:28 +0200 Subject: [PATCH 115/136] update subworkflow --- conf/modules/call_sv_germlinecnvcaller.config | 28 +++----- conf/modules/prepare_references.config | 4 +- modules.json | 2 +- .../nf-core/gatk4/germlinecnvcaller/main.nf | 4 +- .../nf-core/gatk4/germlinecnvcaller/meta.yml | 12 +--- .../gatk4/postprocessgermlinecnvcalls/main.nf | 14 ++-- .../postprocessgermlinecnvcalls/meta.yml | 10 --- .../local/call_structural_variants.nf | 27 ++++---- subworkflows/local/prepare_references.nf | 7 +- .../call_sv_germlinecnvcaller.nf | 67 +++++++++++++------ workflows/raredisease.nf | 18 +++-- 11 files changed, 96 insertions(+), 97 deletions(-) diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index aafa3f01..09a66d63 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -16,45 +16,33 @@ // process { - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_PREPROCESSINTERVALS*" { - publishDir = [ - enabled: false - ] - ext.args = "--padding 0 --interval-merging-rule OVERLAPPING_ONLY" - } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_ANNOTATEINTERVALS*" { - publishDir = [ - enabled: false - ] - ext.args = "--interval-merging-rule OVERLAPPING_ONLY" - } - - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_FILTERINTERVALS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_INTERVALLISTTOOLS*" { publishDir = [ enabled: false ] - ext.args = "--interval-merging-rule OVERLAPPING_ONLY" + ext.args = "--SUBDIVISION_MODE INTERVAL_COUNT --SCATTER_CONTENT 15000" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_INTERVALLISTTOOLS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { publishDir = [ enabled: false ] - ext.args = "--SUBDIVISION_MODE INTERVAL_COUNT --SCATTER_CONTENT 15000" + ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_DETERMINEGERMLINECONTIGPLOIDY" { publishDir = [ enabled: false ] - ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" + ext.prefix = { "${meta.id}_ploidy" } } - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER" { publishDir = [ enabled: false ] ext.args = "--run-mode CASE" + ext.prefix = { "${meta.id}_${model.simpleName}" } } } diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 267906ef..8cbf2519 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -119,12 +119,12 @@ process { } withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WGS' { - ext.args = "--padding 0 --interval-merging-rule OVERLAPPING_ONLY" + ext.args = { "--padding 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } ext.when = { params.analysis_type.equals("wgs")} } withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WES' { - ext.args = "--bin-length 0 --interval-merging-rule OVERLAPPING_ONLY" + ext.args = { "--bin-length 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } ext.when = { params.analysis_type.equals("wes")} } diff --git a/modules.json b/modules.json index 32769e9e..39add9f6 100644 --- a/modules.json +++ b/modules.json @@ -137,7 +137,7 @@ }, "gatk4/germlinecnvcaller": { "branch": "master", - "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", + "git_sha": "f6b848c6e1af9a9ecf4975aa8c8edad05e75e784", "installed_by": ["modules"] }, "gatk4/intervallisttools": { diff --git a/modules/nf-core/gatk4/germlinecnvcaller/main.nf b/modules/nf-core/gatk4/germlinecnvcaller/main.nf index 994de794..9b31c56d 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/main.nf +++ b/modules/nf-core/gatk4/germlinecnvcaller/main.nf @@ -11,9 +11,7 @@ process GATK4_GERMLINECNVCALLER { } input: - tuple val(meta), path(tsv), path(intervals) - tuple val(meta2), path(model) - tuple val(meta3), path(ploidy) + tuple val(meta), path(tsv), path(intervals), path(ploidy), path(model) output: tuple val(meta), path("*-cnv-calls/*-calls"), emit: calls, optional: true diff --git a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml index c4ea7c39..b7430927 100644 --- a/modules/nf-core/gatk4/germlinecnvcaller/meta.yml +++ b/modules/nf-core/gatk4/germlinecnvcaller/meta.yml @@ -21,16 +21,6 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - meta3: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - tsv: type: file description: One or more count TSV files created with gatk/collectreadcounts @@ -45,7 +35,7 @@ input: pattern: "*-cnv-model/*-model" - ploidy: type: file - description: directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode + description: Directory containing ploidy calls produced by determinegermlinecontigploidy case or cohort mode pattern: "*-calls" output: diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf index e72e9c80..8faf0121 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/main.nf @@ -11,9 +11,7 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { } input: - tuple val(meta), path(ploidy) - tuple val(meta2), path(model) - tuple val(meta3), path(calls) + tuple val(meta), path(calls), path(model), path(ploidy) output: tuple val(meta), path("*_genotyped_intervals.vcf.gz") , emit: intervals, optional: true @@ -27,9 +25,9 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def ploidy_command = ploidy ? "--contig-ploidy-calls ${ploidy}" : "" - def model_command = model ? "--model-shard-path ${model}" : "" - def calls_command = calls ? "--calls-shard-path ${calls}" : "" + def calls_command = calls ? calls.collect{"--calls-shard-path $it"}.join(' ') : "" + def model_command = model ? model.collect{"--model-shard-path $it"}.join(' ') : "" + def ploidy_command = ploidy ? "--contig-ploidy-calls ${ploidy}" : "" def avail_mem = 3072 if (!task.memory) { @@ -39,9 +37,9 @@ process GATK4_POSTPROCESSGERMLINECNVCALLS { } """ gatk --java-options "-Xmx${avail_mem}g" PostprocessGermlineCNVCalls \\ - $ploidy_command \\ - $model_command \\ $calls_command \\ + $model_command \\ + $ploidy_command \\ --output-genotyped-intervals ${prefix}_genotyped_intervals.vcf.gz \\ --output-genotyped-segments ${prefix}_genotyped_segments.vcf.gz \\ --output-denoised-copy-ratios ${prefix}_denoised.vcf.gz diff --git a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml index 856e79b6..92e06cae 100644 --- a/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml +++ b/modules/nf-core/gatk4/postprocessgermlinecnvcalls/meta.yml @@ -21,16 +21,6 @@ input: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - meta2: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - meta3: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - ploidy: type: directory description: | diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index f8c77aea..49fb0a43 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -11,18 +11,19 @@ include { TABIX_TABIX } from '../../modules/nf-core/tabix/tabix/m workflow CALL_STRUCTURAL_VARIANTS { take: - ch_bam // channel: [mandatory] [ val(meta), path(bam) ] - ch_bai // channel: [mandatory] [ val(meta), path(bai) ] - ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] - ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] - ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] - ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] - ch_case_info // channel: [mandatory] [ val(case_info) ] - ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] - ch_genome_dictionary // channel: [optional; used by mandatory for GATK's cnvcaller][ val(meta), path(dict) ] - ch_blacklist_bed // channel: [optional; used by mandatory for GATK's cnvcaller][ path(blacklist_bed) ] - ch_ploidy_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(ploidy_model) ] - ch_gcnvcaller_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(gcnvcaller_model) ] + ch_bam // channel: [mandatory] [ val(meta), path(bam) ] + ch_bai // channel: [mandatory] [ val(meta), path(bai) ] + ch_bam_bai // channel: [mandatory] [ val(meta), path(bam), path(bai) ] + ch_bwa_index // channel: [mandatory] [ val(meta), path(index)] + ch_genome_fasta // channel: [mandatory] [ val(meta), path(fasta) ] + ch_genome_fai // channel: [mandatory] [ val(meta), path(fai) ] + ch_case_info // channel: [mandatory] [ val(case_info) ] + ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] + ch_genome_dictionary // channel: [optional; used by mandatory for GATK's cnvcaller][ val(meta), path(dict) ] + ch_blacklist_bed // channel: [optional; used by mandatory for GATK's cnvcaller][ path(blacklist_bed) ] + ch_readcount_intervals // channel: [optional; used by mandatory for GATK's cnvcaller][ path(intervals) ] + ch_ploidy_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(ploidy_model) ] + ch_gcnvcaller_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(gcnvcaller_model) ] main: ch_versions = Channel.empty() @@ -37,7 +38,7 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_target_bed, ch_blacklist_bed, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_blacklist_bed, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } diff --git a/subworkflows/local/prepare_references.nf b/subworkflows/local/prepare_references.nf index 80f8c51f..45e20a24 100644 --- a/subworkflows/local/prepare_references.nf +++ b/subworkflows/local/prepare_references.nf @@ -91,8 +91,9 @@ workflow PREPARE_REFERENCES { UNTAR_VEP_CACHE (ch_vep_cache) //cnvcalling intervals - GATK_PREPROCESS_WGS (ch_genome_fasta, ch_fai, GATK_SD.out.dict, [[],[]], [[],[]]) - GATK_PREPROCESS_WES (ch_genome_fasta, ch_fai, GATK_SD.out.dict, GATK_BILT.out.interval_list, [[],[]]) + GATK_PREPROCESS_WGS (ch_genome_fasta, ch_fai, GATK_SD.out.dict, [[],[]], [[],[]]).set {ch_preprocwgs} + GATK_PREPROCESS_WES (ch_genome_fasta, ch_fai, GATK_SD.out.dict, GATK_BILT.out.interval_list, [[],[]]).set {ch_preprocwes} + // Gather versions ch_versions = ch_versions.mix(BWA_INDEX_GENOME.out.versions) ch_versions = ch_versions.mix(BWAMEM2_INDEX_GENOME.out.versions) @@ -122,6 +123,8 @@ workflow PREPARE_REFERENCES { genome_chrom_sizes = GET_CHROM_SIZES.out.sizes.collect() // channel: [ path(sizes) ] genome_fai = ch_fai // channel: [ val(meta), path(fai) ] genome_dict = GATK_SD.out.dict.collect() // channel: [ path(dict) ] + readcount_intervals = Channel.empty() + .mix(ch_preprocwgs.interval_list,ch_preprocwes.interval_list)// channel: [ path(intervals) ] mt_intervals = ch_shiftfasta_mtintervals.intervals.collect() // channel: [ path(intervals) ] mtshift_intervals = ch_shiftfasta_mtintervals.shift_intervals.collect() // channel: [ path(intervals) ] diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index b853fd3c..04853861 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -2,10 +2,6 @@ nextflow.enable.dsl = 2 -include { GATK4_PREPROCESSINTERVALS } from '../../../modules/nf-core/gatk4/preprocessintervals/main.nf' -include { GATK4_ANNOTATEINTERVALS } from '../../../modules/nf-core/gatk4/annotateintervals/main.nf' -include { GATK4_FILTERINTERVALS } from '../../../modules/nf-core/gatk4/filterintervals/main.nf' -include { GATK4_INTERVALLISTTOOLS } from '../../../modules/nf-core/gatk4/intervallisttools/main.nf' include { GATK4_COLLECTREADCOUNTS } from '../../../modules/nf-core/gatk4/collectreadcounts/main.nf' include { GATK4_DETERMINEGERMLINECONTIGPLOIDY } from '../../../modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf' include { GATK4_GERMLINECNVCALLER } from '../../../modules/nf-core/gatk4/germlinecnvcaller/main.nf' @@ -13,33 +9,44 @@ include { GATK4_POSTPROCESSGERMLINECNVCALLS } from '../../../modules/nf-core/g workflow CALL_SV_GERMLINECNVCALLER { take: - ch_bam_bai // channel: [mandatory][ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [mandatory][ val(meta), path(ch_fasta_no_meta) ] - ch_fai // channel: [mandatory][ val(meta), path(ch_fai) ] - ch_target_bed // channel: [mandatory][ val(meta), path(bed), path(tbi) ] - ch_blacklist_bed // channel: [mandatory][ val(meta), path(ch_blacklist_bed) ] - ch_genome_dictionary // channel: [mandatory][ val(meta), path(ch_dict) ] - ch_ploidy_model // channel: [mandatory][ path(ch_ploidy_model) ] - ch_gcnvcaller_model // channel: [mandatory][ path(ch_gcnvcaller_model) ] + ch_bam_bai // channel: [mandatory][ val(meta), path(bam), path(bai) ] + ch_fasta // channel: [mandatory][ val(meta), path(ch_fasta_no_meta) ] + ch_fai // channel: [mandatory][ val(meta), path(ch_fai) ] + ch_readcount_intervals // channel: [mandatory][ val(meta), path(bed), path(tbi) ] + ch_blacklist_bed // channel: [mandatory][ val(meta), path(ch_blacklist_bed) ] + ch_genome_dictionary // channel: [mandatory][ val(meta), path(ch_dict) ] + ch_ploidy_model // channel: [mandatory][ path(ch_ploidy_model) ] + ch_gcnvcaller_model // channel: [mandatory][ path(ch_gcnvcaller_model) ] main: ch_versions = Channel.empty() - input = ch_bam_bai.combine( ch_target_bed.collect{ it[1] } ) + input = ch_bam_bai.combine( ch_readcount_intervals.collect{ it[1] } ) GATK4_COLLECTREADCOUNTS ( input, ch_fasta, ch_fai, ch_genome_dictionary ) - ch_dgcp_in = GATK4_COLLECTREADCOUNTS.out.tsv + GATK4_COLLECTREADCOUNTS.out.tsv .groupTuple() .map({ meta, tsv -> return [meta, tsv, [], [] ]}) - GATK4_DETERMINEGERMLINECONTIGPLOIDY ( ch_dgcp_in, [], ch_ploidy_model ) + .set{ch_dgcp_in} + GATK4_DETERMINEGERMLINECONTIGPLOIDY ( ch_dgcp_in, ch_ploidy_model, [] ) - gcnvc_case_input = GATK4_COLLECTREADCOUNTS.out.tsv - .groupTuple() - .map({ meta, tsv -> return [meta, tsv, [] ]}) - GATK4_GERMLINECNVCALLER ( gcnvc_case_input, ch_gcnvcaller_model, GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls.collect{ it[1] } ) + GATK4_COLLECTREADCOUNTS.out.tsv + .join(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls) + .combine(ch_gcnvcaller_model) + .map({ meta, tsv, calls, meta2, model -> return [meta, tsv, [], calls, model ]}) + .set{ch_gcnvc_in} + + GATK4_GERMLINECNVCALLER ( ch_gcnvc_in ) + + GATK4_GERMLINECNVCALLER.out.calls.toList() + .flatMap {reduce_input(it)} + .buffer (size: 2) + .combine(ch_gcnvcaller_model.collect{it[1]}.toList()) + .join(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.calls) + .set {ch_postproc_in} - GATK4_POSTPROCESSGERMLINECNVCALLS ( GATK4_GERMLINECNVCALLER.out.calls, ch_gcnvcaller_model, GATK4_GERMLINECNVCALLER.out.calls.collect{ it[1] } ) + GATK4_POSTPROCESSGERMLINECNVCALLS ( ch_postproc_in ) ch_versions = ch_versions.mix(GATK4_COLLECTREADCOUNTS.out.versions) ch_versions = ch_versions.mix(GATK4_DETERMINEGERMLINECONTIGPLOIDY.out.versions) @@ -52,3 +59,23 @@ workflow CALL_SV_GERMLINECNVCALLER { denoised_vcf = GATK4_POSTPROCESSGERMLINECNVCALLS.out.denoised // channel: [ val(meta), path(*.tar.gz) ] versions = ch_versions // channel: [ versions.yml ] } + +def reduce_input (List gcnvoutput) { + def dictionary = [:] + def reducedList = [] + for (int i = 0; i [[id:it[0].simpleName], it] }.collect() : ( ch_references.blacklist_bed ?: Channel.empty() ) - ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).collect() - : ( ch_references.ploidy_model ?: Channel.empty() ) - ch_gcnvcaller_model = params.gcnvcaller_model ? Channel.fromPath(params.gcnvcaller_model).collect() - : ( ch_references.gcnvcaller_model ?: Channel.empty() ) - ch_bait_intervals = ch_references.bait_intervals ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() : Channel.value([]) @@ -217,6 +214,11 @@ workflow RAREDISEASE { : Channel.value([]) ch_dbsnp_tbi = params.known_dbsnp_tbi ? Channel.fromPath(params.known_dbsnp_tbi).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.known_dbsnp_tbi.ifEmpty([[],[]]) + ch_gcnvcaller_model = params.gcnvcaller_model ? Channel.fromPath(params.gcnvcaller_model).splitCsv ( header:true ) + .map { row -> + return [[id:file(row.models).simpleName], row.models] + } + : Channel.empty() ch_genome_bwaindex = params.bwa ? Channel.fromPath(params.bwa).map {it -> [[id:it[0].simpleName], it]}.collect() : ch_references.genome_bwa_index ch_genome_bwamem2index = params.bwamem2 ? Channel.fromPath(params.bwamem2).map {it -> [[id:it[0].simpleName], it]}.collect() @@ -243,6 +245,8 @@ workflow RAREDISEASE { ch_mtshift_fai = ch_references.mtshift_fai ch_mtshift_fasta = ch_references.mtshift_fasta ch_mtshift_intervals = ch_references.mtshift_intervals + ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).map{ it -> [[id:it[0].simpleName], it] }.collect() + : ( ch_references.ploidy_model ?: Channel.empty() ) ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() @@ -266,7 +270,6 @@ workflow RAREDISEASE { : Channel.value([]) ch_versions = ch_versions.mix(ch_references.versions) - // Generate pedigree file ch_pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } @@ -368,6 +371,7 @@ workflow RAREDISEASE { ch_target_bed, ch_genome_dictionary, ch_blacklist_bed, + ch_readcount_intervals, ch_ploidy_model, ch_gcnvcaller_model ) From ce454dc0a4ea7f749ead41f70642651903f7ed4c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Jul 2023 16:06:27 +0200 Subject: [PATCH 116/136] update modules --- modules.json | 26 +++++++++---------- modules/nf-core/bcftools/filter/main.nf | 26 ++++++++++++++++--- modules/nf-core/bcftools/merge/main.nf | 10 ++++--- modules/nf-core/deepvariant/main.nf | 2 +- modules/nf-core/fastqc/main.nf | 6 ++++- .../gatk4/createsequencedictionary/main.nf | 2 +- modules/nf-core/gatk4/printreads/main.nf | 2 +- modules/nf-core/gatk4/selectvariants/main.nf | 1 + modules/nf-core/gatk4/shiftfasta/main.nf | 1 + modules/nf-core/gatk4/splitintervals/main.nf | 1 - modules/nf-core/manta/germline/main.nf | 1 + modules/nf-core/samtools/sort/main.nf | 2 -- modules/nf-core/tabix/bgziptabix/main.nf | 2 +- modules/nf-core/ucsc/wigtobigwig/main.nf | 10 +++---- modules/nf-core/ucsc/wigtobigwig/meta.yml | 1 + 15 files changed, 59 insertions(+), 34 deletions(-) diff --git a/modules.json b/modules.json index f3bd866a..e582b8c7 100644 --- a/modules.json +++ b/modules.json @@ -17,12 +17,12 @@ }, "bcftools/filter": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "bd4e0df3319c171072d09dade42e3c06fa373779", "installed_by": ["modules"] }, "bcftools/merge": { "branch": "master", - "git_sha": "0435e4eebc94e53721c194b2d5d06f455a79e407", + "git_sha": "f7219b428dc69f93aa19f219fb7ce8eae8720400", "installed_by": ["modules"] }, "bcftools/norm": { @@ -82,7 +82,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "4b7d4863a5883b76e6bff13b6e52468fab090c5b", "installed_by": ["modules"] }, "eklipse": { @@ -97,7 +97,7 @@ }, "fastqc": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "bd8092b67b5103bdd52e300f75889442275c3117", "installed_by": ["modules"] }, "gatk4/bedtointervallist": { @@ -107,7 +107,7 @@ }, "gatk4/createsequencedictionary": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "gatk4/filtermutectcalls": { @@ -137,7 +137,7 @@ }, "gatk4/printreads": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "gatk4/revertsam": { @@ -152,17 +152,17 @@ }, "gatk4/selectvariants": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "gatk4/shiftfasta": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "gatk4/splitintervals": { "branch": "master", - "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", + "git_sha": "541811d779026c5d395925895fa5ed35e7216cc0", "installed_by": ["modules"] }, "gatk4/variantfiltration": { @@ -212,7 +212,7 @@ }, "manta/germline": { "branch": "master", - "git_sha": "0460d316170f75f323111b4a2c0a2989f0c32013", + "git_sha": "80dbd95c558a0ebb2123d95f50c093a7f714a0d7", "installed_by": ["modules"] }, "mosdepth": { @@ -297,7 +297,7 @@ }, "samtools/sort": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "a0f7be95788366c1923171e358da7d049eb440f9", "installed_by": ["modules"] }, "samtools/stats": { @@ -332,7 +332,7 @@ }, "tabix/bgziptabix": { "branch": "master", - "git_sha": "01b3b2509d76625b6d6cd613b349fb4777712a15", + "git_sha": "591b71642820933dcb3c954c934b397bd00d8e5e", "installed_by": ["modules"] }, "tabix/tabix": { @@ -352,7 +352,7 @@ }, "ucsc/wigtobigwig": { "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", + "git_sha": "66290981ab6038ea86177ade40b9449bc790b0ce", "installed_by": ["modules"] }, "untar": { diff --git a/modules/nf-core/bcftools/filter/main.nf b/modules/nf-core/bcftools/filter/main.nf index 07f33a2e..099eedc7 100644 --- a/modules/nf-core/bcftools/filter/main.nf +++ b/modules/nf-core/bcftools/filter/main.nf @@ -11,8 +11,8 @@ process BCFTOOLS_FILTER { tuple val(meta), path(vcf) output: - tuple val(meta), path("*.gz"), emit: vcf - path "versions.yml" , emit: versions + tuple val(meta), path("*.${extension}"), emit: vcf + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when @@ -20,9 +20,19 @@ process BCFTOOLS_FILTER { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + + 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" + + if ("$vcf" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" + """ bcftools filter \\ - --output ${prefix}.vcf.gz \\ + --output ${prefix}.${extension} \\ + --threads ${task.cpus} \\ $args \\ $vcf @@ -35,8 +45,16 @@ process BCFTOOLS_FILTER { stub: def prefix = task.ext.prefix ?: "${meta.id}" + 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" + + if ("$vcf" == "${prefix}.${extension}") error "Input and output names are the same, set prefix in module configuration to disambiguate!" + """ - touch ${prefix}.vcf.gz + touch ${prefix}.${extension} cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index 76b35345..eec740ed 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -27,16 +27,17 @@ process BCFTOOLS_MERGE { 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.gz" + "vcf" """ bcftools merge \\ + $args \\ $regions \\ --threads $task.cpus \\ --output ${prefix}.${extension} \\ - $args \\ - *.vcf.gz + $vcfs cat <<-END_VERSIONS > versions.yml "${task.process}": @@ -49,8 +50,9 @@ process BCFTOOLS_MERGE { 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.gz" + "vcf" """ touch ${prefix}.${extension} diff --git a/modules/nf-core/deepvariant/main.nf b/modules/nf-core/deepvariant/main.nf index 2cea90ab..1a24ba34 100644 --- a/modules/nf-core/deepvariant/main.nf +++ b/modules/nf-core/deepvariant/main.nf @@ -2,7 +2,7 @@ process DEEPVARIANT { tag "$meta.id" label 'process_high' - container "docker.io/google/deepvariant:1.5.0" + container "nf-core/deepvariant:1.5.0" // Exit if running this module with -profile conda / -profile mamba if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf index 07d5e433..249f9064 100644 --- a/modules/nf-core/fastqc/main.nf +++ b/modules/nf-core/fastqc/main.nf @@ -29,7 +29,11 @@ process FASTQC { printf "%s %s\\n" $rename_to | while read old_name new_name; do [ -f "\${new_name}" ] || ln -s \$old_name \$new_name done - fastqc $args --threads $task.cpus $renamed_files + + fastqc \\ + $args \\ + --threads $task.cpus \\ + $renamed_files cat <<-END_VERSIONS > versions.yml "${task.process}": diff --git a/modules/nf-core/gatk4/createsequencedictionary/main.nf b/modules/nf-core/gatk4/createsequencedictionary/main.nf index 41abb235..15a86bea 100644 --- a/modules/nf-core/gatk4/createsequencedictionary/main.nf +++ b/modules/nf-core/gatk4/createsequencedictionary/main.nf @@ -20,7 +20,7 @@ process GATK4_CREATESEQUENCEDICTIONARY { script: def args = task.ext.args ?: '' - def avail_mem = 6 + def avail_mem = 6144 if (!task.memory) { log.info '[GATK CreateSequenceDictionary] Available memory not known - defaulting to 6GB. Specify process memory requirements to change this.' } else { diff --git a/modules/nf-core/gatk4/printreads/main.nf b/modules/nf-core/gatk4/printreads/main.nf index 0fd13048..084d0b46 100644 --- a/modules/nf-core/gatk4/printreads/main.nf +++ b/modules/nf-core/gatk4/printreads/main.nf @@ -25,6 +25,7 @@ process GATK4_PRINTREADS { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" + def avail_mem = 3072 if (!task.memory) { log.info '[GATK PrintReads] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' @@ -34,7 +35,6 @@ process GATK4_PRINTREADS { if ("${input}" == "${prefix}.${input.extension}") { error("Output filename is the same as input filename. Please specify a different prefix.") } - """ gatk --java-options "-Xmx${avail_mem}M" PrintReads \\ $args \\ diff --git a/modules/nf-core/gatk4/selectvariants/main.nf b/modules/nf-core/gatk4/selectvariants/main.nf index 6c08c3b5..609cb8cc 100644 --- a/modules/nf-core/gatk4/selectvariants/main.nf +++ b/modules/nf-core/gatk4/selectvariants/main.nf @@ -22,6 +22,7 @@ process GATK4_SELECTVARIANTS { 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.' diff --git a/modules/nf-core/gatk4/shiftfasta/main.nf b/modules/nf-core/gatk4/shiftfasta/main.nf index cf984e8b..ab0e578c 100644 --- a/modules/nf-core/gatk4/shiftfasta/main.nf +++ b/modules/nf-core/gatk4/shiftfasta/main.nf @@ -28,6 +28,7 @@ process GATK4_SHIFTFASTA { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def seq_dict = dict ? "--sequence-dictionary ${dict}" : "" + def avail_mem = 3072 if (!task.memory) { log.info '[GATK ShiftFasta] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' diff --git a/modules/nf-core/gatk4/splitintervals/main.nf b/modules/nf-core/gatk4/splitintervals/main.nf index df5d0be1..3cb18373 100644 --- a/modules/nf-core/gatk4/splitintervals/main.nf +++ b/modules/nf-core/gatk4/splitintervals/main.nf @@ -31,7 +31,6 @@ process GATK4_SPLITINTERVALS { } else { avail_mem = (task.memory.mega*0.8).intValue() } - """ gatk --java-options "-Xmx${avail_mem}M" SplitIntervals \\ --output ${prefix} \\ diff --git a/modules/nf-core/manta/germline/main.nf b/modules/nf-core/manta/germline/main.nf index 8f785fe0..e052b7c9 100644 --- a/modules/nf-core/manta/germline/main.nf +++ b/modules/nf-core/manta/germline/main.nf @@ -1,6 +1,7 @@ process MANTA_GERMLINE { tag "$meta.id" label 'process_medium' + label 'error_retry' conda "bioconda::manta=1.6.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf index 1e5181d4..2b7753fd 100644 --- a/modules/nf-core/samtools/sort/main.nf +++ b/modules/nf-core/samtools/sort/main.nf @@ -21,13 +21,11 @@ process SAMTOOLS_SORT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def sort_memory = (task.memory.mega/task.cpus).intValue() if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!" """ samtools sort \\ $args \\ -@ $task.cpus \\ - -m ${sort_memory}M \\ -o ${prefix}.bam \\ -T $prefix \\ $bam diff --git a/modules/nf-core/tabix/bgziptabix/main.nf b/modules/nf-core/tabix/bgziptabix/main.nf index fef528fc..d6c5a760 100644 --- a/modules/nf-core/tabix/bgziptabix/main.nf +++ b/modules/nf-core/tabix/bgziptabix/main.nf @@ -5,7 +5,7 @@ process TABIX_BGZIPTABIX { conda "bioconda::tabix=1.11" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/tabix:1.11--hdfd78af_0' : - 'quay.io/biocontainers/tabix:1.11--hdfd78af_0' }" + 'biocontainers/tabix:1.11--hdfd78af_0' }" input: tuple val(meta), path(input) diff --git a/modules/nf-core/ucsc/wigtobigwig/main.nf b/modules/nf-core/ucsc/wigtobigwig/main.nf index 493cf578..c5f215b1 100644 --- a/modules/nf-core/ucsc/wigtobigwig/main.nf +++ b/modules/nf-core/ucsc/wigtobigwig/main.nf @@ -3,10 +3,10 @@ process UCSC_WIGTOBIGWIG { label 'process_single' // WARN: Version information not provided by tool on CLI. Please update version string below when bumping container versions. - conda "bioconda::ucsc-wigtobigwig=377" + conda "bioconda::ucsc-wigtobigwig=447" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/ucsc-wigtobigwig:377--h0b8a92a_2' : - 'biocontainers/ucsc-wigtobigwig:377--h0b8a92a_2' }" + 'https://depot.galaxyproject.org/singularity/ucsc-wigtobigwig:447--h2a80c09_1' : + 'biocontainers/ucsc-wigtobigwig:447--h2a80c09_1' }" input: tuple val(meta), path(wig) @@ -22,7 +22,7 @@ process UCSC_WIGTOBIGWIG { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '447' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ wigToBigWig \\ $args \\ @@ -38,7 +38,7 @@ process UCSC_WIGTOBIGWIG { stub: def prefix = task.ext.prefix ?: "${meta.id}" - def VERSION = '377' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. + def VERSION = '447' // WARN: Version information not provided by tool on CLI. Please update this string when bumping container versions. """ touch ${prefix}.bw diff --git a/modules/nf-core/ucsc/wigtobigwig/meta.yml b/modules/nf-core/ucsc/wigtobigwig/meta.yml index a597fde0..470967db 100644 --- a/modules/nf-core/ucsc/wigtobigwig/meta.yml +++ b/modules/nf-core/ucsc/wigtobigwig/meta.yml @@ -3,6 +3,7 @@ description: Convert ascii format wig file to binary big wig format keywords: - wig - bigwig + - ucsc tools: - ucsc: description: | From 12d63028d8aa95b3c8351c350d46bee7040c6d9c Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Jul 2023 16:08:38 +0200 Subject: [PATCH 117/136] prettier --- modules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules.json b/modules.json index 39add9f6..b8a44cb9 100644 --- a/modules.json +++ b/modules.json @@ -162,7 +162,7 @@ }, "gatk4/postprocessgermlinecnvcalls": { "branch": "master", - "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", + "git_sha": "39ca55cc30514169f8420162bafe4ecf673f4b9a", "installed_by": ["modules"] }, "gatk4/preprocessintervals": { From f1bfc8b2481b4bdc6cb014bc1c480734bd7d4ae5 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Jul 2023 17:44:01 +0200 Subject: [PATCH 118/136] update nextflow.config --- nextflow.config | 53 +++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/nextflow.config b/nextflow.config index ceb2b8b3..bba1a9be 100644 --- a/nextflow.config +++ b/nextflow.config @@ -54,7 +54,6 @@ params { // Boilerplate options outdir = 'results' - tracedir = "${params.outdir}/pipeline_info" publish_dir_mode = 'copy' email = null email_on_fail = null @@ -63,20 +62,14 @@ params { hook_url = null help = false version = false - validate_params = true - show_hidden_params = false - schema_ignore_params = 'genomes' - // Config options + config_profile_name = null + config_profile_description = null custom_config_version = 'master' custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_description = null config_profile_contact = null config_profile_url = null - config_profile_name = null - - local_config_path = null // Max resource options // Defaults only, expecting to be overwritten @@ -84,6 +77,13 @@ params { max_cpus = 16 max_time = '240.h' + // Schema validation default options + validationFailUnrecognisedParams = false + validationLenientMode = false + validationSchemaIgnoreParams = 'genomes' + validationShowHiddenParams = false + validate_params = true + } // Load base.config by default for all pipelines @@ -103,13 +103,11 @@ try { // } catch (Exception e) { // System.err.println("WARNING: Could not load nf-core/config/raredisease profiles: ${params.custom_config_base}/pipeline/raredisease.config") // } - - profiles { debug { dumpHashes = true process.beforeScript = 'echo $HOSTNAME' - cleanup = false + cleanup = false } conda { conda.enabled = true @@ -132,7 +130,6 @@ profiles { } docker { docker.enabled = true - docker.registry = 'quay.io' docker.userEmulation = true conda.enabled = false singularity.enabled = false @@ -156,7 +153,6 @@ profiles { } podman { podman.enabled = true - podman.registry = 'quay.io' conda.enabled = false docker.enabled = false singularity.enabled = false @@ -204,7 +200,20 @@ profiles { test_one_sample { includeConfig 'conf/test_one_sample.config' } } -// Load igenomes.config if required, else load custom genomes.config +// Set default registry for Apptainer, Docker, Podman and Singularity independent of -profile +// Will not be used unless Apptainer / Docker / Podman / Singularity are enabled +// Set to your registry if you have a mirror of containers +apptainer.registry = 'quay.io' +docker.registry = 'quay.io' +podman.registry = 'quay.io' +singularity.registry = 'quay.io' + +// Nextflow plugins +plugins { + id 'nf-validation' // Validation of pipeline parameters and creation of an input channel from a sample sheet +} + +// Load igenomes.config if required if (!params.igenomes_ignore) { includeConfig 'conf/igenomes.config' } else { @@ -218,10 +227,6 @@ try { System.err.println("WARNING: Could not load nf-core/config/raredisease profiles: ${params.custom_config_base}/pipeline/raredisease.config") } -// Load in-house config -if (params.local_config_path) { - includeConfig "${params.local_config_path}" -} // Load wes.config if --analysis_type='wes' if (params.analysis_type == 'wes') { @@ -252,19 +257,19 @@ podman.registry = 'quay.io' def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true - file = "${params.tracedir}/execution_timeline_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_timeline_${trace_timestamp}.html" } report { enabled = true - file = "${params.tracedir}/execution_report_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/execution_report_${trace_timestamp}.html" } trace { enabled = true - file = "${params.tracedir}/execution_trace_${trace_timestamp}.txt" + file = "${params.outdir}/pipeline_info/execution_trace_${trace_timestamp}.txt" } dag { enabled = true - file = "${params.tracedir}/pipeline_dag_${trace_timestamp}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${trace_timestamp}.html" } manifest { @@ -273,7 +278,7 @@ manifest { homePage = 'https://github.com/nf-core/raredisease' description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' - nextflowVersion = '!>=22.10.1' + nextflowVersion = '!>=23.04.0' version = '1.1.0dev' doi = '' } From 6302e7300718b72b7492ffdd7594185c6ca85975 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Jul 2023 18:12:02 +0200 Subject: [PATCH 119/136] lint error --- nextflow_schema.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 80af02d5..51b4586a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -504,11 +504,6 @@ "description": "Institutional config URL link.", "hidden": true, "fa_icon": "fas fa-users-cog" - }, - "local_config_path": { - "type": "string", - "description": "Path to local config", - "fa_icon": "fas fa-users-cog" } } }, From bafc512049c77bd87872c0aca395b1664d6c58e1 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 4 Jul 2023 21:26:30 +0200 Subject: [PATCH 120/136] remove modules [skip ci] --- modules.json | 10 --- .../nf-core/gatk4/annotateintervals/main.nf | 68 ---------------- .../nf-core/gatk4/annotateintervals/meta.yml | 77 ------------------- modules/nf-core/gatk4/filterintervals/main.nf | 58 -------------- .../nf-core/gatk4/filterintervals/meta.yml | 53 ------------- 5 files changed, 266 deletions(-) delete mode 100644 modules/nf-core/gatk4/annotateintervals/main.nf delete mode 100644 modules/nf-core/gatk4/annotateintervals/meta.yml delete mode 100644 modules/nf-core/gatk4/filterintervals/main.nf delete mode 100644 modules/nf-core/gatk4/filterintervals/meta.yml diff --git a/modules.json b/modules.json index 39add9f6..dcce0a51 100644 --- a/modules.json +++ b/modules.json @@ -100,11 +100,6 @@ "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", "installed_by": ["modules"] }, - "gatk4/annotateintervals": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, "gatk4/bedtointervallist": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", @@ -125,11 +120,6 @@ "git_sha": "d25bf48327e86a7f737047a57ec264b90e22ce3d", "installed_by": ["modules"] }, - "gatk4/filterintervals": { - "branch": "master", - "git_sha": "911696ea0b62df80e900ef244d7867d177971f73", - "installed_by": ["modules"] - }, "gatk4/filtermutectcalls": { "branch": "master", "git_sha": "2df2a11d5b12f2a73bca74f103691bc35d83c5fd", diff --git a/modules/nf-core/gatk4/annotateintervals/main.nf b/modules/nf-core/gatk4/annotateintervals/main.nf deleted file mode 100644 index 394a6aa0..00000000 --- a/modules/nf-core/gatk4/annotateintervals/main.nf +++ /dev/null @@ -1,68 +0,0 @@ -process GATK4_ANNOTATEINTERVALS { - tag "$meta.id" - label 'process_single' - - conda "bioconda::gatk4=4.4.0.0" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" - - input: - tuple val(meta), path(intervals) - path(fasta) - path(fasta_fai) - path(dict) - path(mappable_regions) - path(mappable_regions_tbi) - path(segmental_duplication_regions) - path(segmental_duplication_regions_tbi) - - output: - tuple val(meta), path("*.tsv"), emit: annotated_intervals - 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 inputs = intervals.collect(){ "--intervals ${it}" }.join(" ") - def mappability_track = mappable_regions ? "--mappability-track ${mappable_regions}" : "" - def segmental_duplication_tracks = segmental_duplication_regions ? "--segmental-duplication-track ${segmental_duplication_regions}" : "" - - def avail_mem = 3072 - if (!task.memory) { - log.info '[GATK AnnotateIntervals] 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" AnnotateIntervals \\ - ${inputs} \\ - --reference ${fasta} \\ - --output ${prefix}.tsv \\ - ${mappability_track} \\ - ${segmental_duplication_tracks} \\ - --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}.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/annotateintervals/meta.yml b/modules/nf-core/gatk4/annotateintervals/meta.yml deleted file mode 100644 index 6f16c958..00000000 --- a/modules/nf-core/gatk4/annotateintervals/meta.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: "gatk4_annotateintervals" -description: Annotates intervals with GC content, mappability, and segmental-duplication content -keywords: - - gatk - - annotateintervals - - intervals - - bed - - annotation -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"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - intervals: - type: file(s) - description: One or more interval files to annotate - pattern: "*.{interval_list,list,bed}" - - fasta: - type: file - description: The reference FASTA file - pattern: "*.{fasta,fa}" - - fasta_fai: - type: file - description: The index of the reference FASTA file - pattern: "*.fai" - - dict: - type: file - description: The sequence dictionary reference FASTA file - pattern: "*.dict" - - mappable_regions: - type: file - description: | - Optional - Umap single-read mappability track - The track should correspond to the appropriate read length and overlapping intervals must be merged - pattern: "*.bed(.gz)?" - - mappable_regions_tbi: - type: file - description: Optional - The index of the gzipped umap single-read mappability track - pattern: "*.bed.gz.tbi" - - segmental_duplication_regions: - type: file - description: Optional - Segmental-duplication track - pattern: "*.bed(.gz)?" - - segmental_duplication_regions_tbi: - type: file - description: Optional - The index of the gzipped segmental-duplication track - pattern: "*.bed.gz.tbi" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - annotated_intervals: - type: file - description: The output TSV file with a SAM-style header containing the annotated intervals - pattern: "*.tsv" - -authors: - - "@nvnieuwk" diff --git a/modules/nf-core/gatk4/filterintervals/main.nf b/modules/nf-core/gatk4/filterintervals/main.nf deleted file mode 100644 index 3a4ae92a..00000000 --- a/modules/nf-core/gatk4/filterintervals/main.nf +++ /dev/null @@ -1,58 +0,0 @@ -process GATK4_FILTERINTERVALS { - tag "$meta.id" - label 'process_medium' - - conda "bioconda::gatk4=4.4.0.0" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/gatk4:4.4.0.0--py36hdfd78af_0': - 'quay.io/biocontainers/gatk4:4.4.0.0--py36hdfd78af_0' }" - - input: - tuple val(meta), path(intervals) - path read_counts - path annotated_intervals - - output: - tuple val(meta), path("*.interval_list"), emit: interval_list - 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 annotated_command = annotated_intervals ? "--annotated-intervals $annotated_intervals" : "" - def read_counts_command = read_counts ? "--input $read_counts" : "" - - def avail_mem = 3072 - if (!task.memory) { - log.info '[GATK FilterIntervals] 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" FilterIntervals \\ - $annotated_command \\ - $read_counts_command \\ - --intervals $intervals \\ - --output ${prefix}.interval_list \\ - $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}.interval_list - - 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/filterintervals/meta.yml b/modules/nf-core/gatk4/filterintervals/meta.yml deleted file mode 100644 index efd66f4a..00000000 --- a/modules/nf-core/gatk4/filterintervals/meta.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: "gatk4_filterintervals" -description: Filters intervals based on annotations and/or count statistics. -keywords: - - gatk4 - - gatk4_filterintervals -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"] - -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - read_counts: - type: file - description: Read counts input file - pattern: "*.{tsv, hdf5}" - - intervals: - type: file - description: Processed interval list file (processed_intervals.interval_list) - pattern: "*.interval_list" - - annotated_intervals: - type: file - description: Annotated intervals TSV file (annotated_intervals.tsv). - pattern: "*.tsv" - -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - interval_list: - type: file - description: Filtered interval list file - pattern: "*.interval_list" - -authors: - - "@ryanjameskennedy" - - "@ViktorHy" From 3665ff3d7a21c38f4b5957af7e87640246d0522d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Jul 2023 18:48:52 +0200 Subject: [PATCH 121/136] update docs --- CHANGELOG.md | 1 + README.md | 4 +- conf/modules/call_sv_germlinecnvcaller.config | 13 +---- conf/modules/prepare_references.config | 4 +- conf/test.config | 7 ++- conf/test_one_sample.config | 7 ++- docs/output.md | 9 +++- docs/usage.md | 23 ++++++--- main.nf | 14 +++--- nextflow.config | 1 + nextflow_schema.json | 50 +++++++++---------- .../local/call_structural_variants.nf | 23 ++++++--- .../call_sv_germlinecnvcaller.nf | 2 +- workflows/raredisease.nf | 23 ++++++--- 14 files changed, 102 insertions(+), 79 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13232758..b360ce81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` +- Add GATK's cnv calling pipeline [#362](https://github.com/nf-core/raredisease/pull/362) - Add `public_aws_ecr` profile for using AWS ECR public gallery images [#360](https://github.com/nf-core/raredisease/pull/360) - GATK's ShiftFasta to generate all the files required for mitochondrial analysis [#354](https://github.com/nf-core/raredisease/pull/354) - Feature to calculate CADD scores for indels [#325](https://github.com/nf-core/raredisease/pull/325) diff --git a/README.md b/README.md index d4eb2665..260cd05e 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ On release, automated continuous integration tests run the pipeline on a full-si - [Manta](https://github.com/Illumina/manta) - [TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) +- Copy number variant calling: + - [GATK GermlineCNVCaller](https://github.com/broadinstitute/gatk) **5. Annotation - SNV:** @@ -153,8 +155,6 @@ For further information or help, don't hesitate to get in touch on the [Slack `# ## Citations - - If you use nf-core/raredisease for your analysis, please cite it using the following doi: [10.5281/zenodo.7995798](https://doi.org/10.5281/zenodo.7995798) An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/conf/modules/call_sv_germlinecnvcaller.config b/conf/modules/call_sv_germlinecnvcaller.config index 09a66d63..bf37b9d9 100644 --- a/conf/modules/call_sv_germlinecnvcaller.config +++ b/conf/modules/call_sv_germlinecnvcaller.config @@ -17,31 +17,22 @@ process { - withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_INTERVALLISTTOOLS*" { + withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER.*" { publishDir = [ enabled: false ] - ext.args = "--SUBDIVISION_MODE INTERVAL_COUNT --SCATTER_CONTENT 15000" + ext.when = !params.skip_cnv_calling } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_COLLECTREADCOUNTS" { - publishDir = [ - enabled: false - ] ext.args = "--format TSV --interval-merging-rule OVERLAPPING_ONLY" } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_DETERMINEGERMLINECONTIGPLOIDY" { - publishDir = [ - enabled: false - ] ext.prefix = { "${meta.id}_ploidy" } } withName: ".*CALL_STRUCTURAL_VARIANTS:CALL_SV_GERMLINECNVCALLER:GATK4_GERMLINECNVCALLER" { - publishDir = [ - enabled: false - ] ext.args = "--run-mode CASE" ext.prefix = { "${meta.id}_${model.simpleName}" } } diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index 8cbf2519..d9d7173d 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -120,12 +120,12 @@ process { withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WGS' { ext.args = { "--padding 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } - ext.when = { params.analysis_type.equals("wgs")} + ext.when = { params.analysis_type.equals("wgs") && !params.readcount_intervals } } withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WES' { ext.args = { "--bin-length 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } - ext.when = { params.analysis_type.equals("wes")} + ext.when = { params.analysis_type.equals("wes") && !params.readcount_intervals } } } diff --git a/conf/test.config b/conf/test.config index cb3a1af8..8065aa8a 100644 --- a/conf/test.config +++ b/conf/test.config @@ -23,15 +23,14 @@ params { igenomes_ignore = true mito_name = 'MT' + // analysis params + skip_cnv_calling = true + // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_trio.csv' // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" - dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" - blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" - ploidy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" - gcnvcaller_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_gcnvcaller_model.tar.gz" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" diff --git a/conf/test_one_sample.config b/conf/test_one_sample.config index 71e704eb..7ffe7ba7 100644 --- a/conf/test_one_sample.config +++ b/conf/test_one_sample.config @@ -23,21 +23,20 @@ params { igenomes_ignore = true mito_name = 'MT' + // analysis params + skip_cnv_calling = true + // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/testdata/samplesheet_single.csv' // Genome references fasta = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.fasta" - dict = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reference.dict" genome = 'GRCh37' gnomad_af = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gnomad_reformated.tab.gz" intervals_wgs = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/target_wgs.interval_list" intervals_y = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/targetY.interval_list" - blacklist_bed = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/hg38.blacklist_interval.bed" - gcnvcaller_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.germline_gcnvcaller_model.tar.gz" known_dbsnp = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/dbsnp_-138-.vcf.gz" ml_model = "https://s3.amazonaws.com/sentieon-release/other/SentieonDNAscopeModel1.0.model" - ploidy_model = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/genome.ploidy_model.tar.gz" reduced_penetrance = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/reduced_penetrance.tsv" score_config_snv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_snv.ini" score_config_sv = "https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/rank_model_sv.ini" diff --git a/docs/output.md b/docs/output.md index 856b0a79..8e822002 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,6 +10,8 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +#### GATK GermlineCNVCaller (CNV calling) + - [Alignment](#alignment) - [Mapping](#mapping) - [Bwa-mem2](#bwa-mem2) @@ -33,6 +35,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Variant calling - SV](#variant-calling---sv) - [Manta](#manta) - [TIDDIT sv](#tiddit-sv) + - [GATK GermlineCNVCaller - CNV calling](#gatk-germlinecnvcaller---cnv-calling) - [SVDB merge](#svdb-merge) - [Variant calling - repeat expansions](#variant-calling---repeat-expansions) - [Expansion Hunter](#expansion-hunter) @@ -252,9 +255,13 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. [TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) is used to identify chromosomal rearrangements using sequencing data. TIDDIT identifies intra and inter-chromosomal translocations, deletions, tandem-duplications and inversions, using supplementary alignments as well as discordant pairs. TIDDIT searches for discordant reads and split reads (supplementary alignments). Output vcf files are treated as intermediates and are not placed in the output folder by default. +#### GATK GermlineCNVCaller - CNV calling + +[GATK GermlineCNVCaller](https://github.com/broadinstitute/gatk) is used to identify copy number variants in germline samples given their read counts and a model describing a sample's ploidy. Output vcf files are treated as intermediates and are not placed in the output folder by default. + #### SVDB merge -[SVDB merge](https://github.com/J35P312/SVDB#merge) is used to merge the variant calls from both Manta and TIDDIT. Output files are published in the output folder. +[SVDB merge](https://github.com/J35P312/SVDB#merge) is used to merge the variant calls from GATK's GermlineCNVCaller (only if skip_cnv_calling is set to false), Manta, and TIDDIT. Output files are published in the output folder.
    Output files diff --git a/docs/usage.md b/docs/usage.md index 02b9376e..0531a198 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -17,9 +17,10 @@ Table of contents: - [3. Repeat expansions](#3-repeat-expansions) - [4. Variant calling - SNV](#4-variant-calling---snv) - [5. Variant calling - Structural variants](#5-variant-calling---structural-variants) - - [6. SNV annotation & Ranking](#6-snv-annotation--ranking) - - [7. SV annotation & Ranking](#7-sv-annotation--ranking) - - [8. Mitochondrial analysis](#8-mitochondrial-analysis) + - [6. Copy number variant calling](#6-copy-number-variant-calling) + - [7. SNV annotation & Ranking](#7-snv-annotation--ranking) + - [8. SV annotation & Ranking](#8-sv-annotation--ranking) + - [9. Mitochondrial analysis](#9-mitochondrial-analysis) - [Run the pipeline](#run-the-pipeline) - [Direct input in CLI](#direct-input-in-cli) - [Import from a config file (recommended)](#import-from-a-config-file-recommended) @@ -188,7 +189,17 @@ The mandatory and optional parameters for each category are tabulated below. | | target_bed | | | bwa | -##### 6. SNV annotation & Ranking +##### 6. Copy number variant calling + +| Mandatory | Optional | +| ---------------------------- | ------------------------------- | +| ploidy_model1 | readcount_intervals2 | +| gcnvcaller_model1 | | + +1 Output from steps 3 & 4 of GATK's CNV calling pipeline run in cohort mode as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). +2 Output from either step 1 or 2 of GATK's CNV calling pipeline as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). + +##### 7. SNV annotation & Ranking | Mandatory | Optional | | ----------------------------- | ------------------------------ | @@ -215,7 +226,7 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl > NB: We use CADD only to annotate small indels. To annotate SNVs with precomputed CADD scores, pass the file containing CADD scores as a resource to vcfanno instead. Files containing the precomputed CADD scores for SNVs can be downloaded from [here](https://cadd.gs.washington.edu/download) (description: "All possible SNVs of GRCh3<7/8>/hg3<7/8>") -##### 7. SV annotation & Ranking +##### 8. SV annotation & Ranking | Mandatory | Optional | | -------------------------- | ------------------ | @@ -227,7 +238,7 @@ no header and the following columns: `CHROM POS REF_ALLELE ALT_ALLELE AF`. Sampl 1 A CSV file that describes the databases (VCFs) used by SVDB for annotating structural variants. Sample file [here](https://github.com/nf-core/test-datasets/blob/raredisease/reference/svdb_querydb_files.csv). Information about the column headers can be found [here](https://github.com/J35P312/SVDB#Query). -##### 8. Mitochondrial analysis +##### 9. Mitochondrial analysis | Mandatory | Optional | | ----------------- | -------- | diff --git a/main.nf b/main.nf index eabc26b2..bd36eb34 100644 --- a/main.nf +++ b/main.nf @@ -23,6 +23,10 @@ params.bwa = WorkflowMain.getGenomeAttribute(params, params.bwamem2 = WorkflowMain.getGenomeAttribute(params, 'bwamem2') params.call_interval = WorkflowMain.getGenomeAttribute(params, 'call_interval') params.cadd_resources = WorkflowMain.getGenomeAttribute(params, 'cadd_resources') +params.gcnvcaller_model = WorkflowMain.getGenomeAttribute(params, 'gcnvcaller_model') +params.gens_interval_list = WorkflowMain.getGenomeAttribute(params, 'gens_interval_list') +params.gens_pon = WorkflowMain.getGenomeAttribute(params, 'gens_pon') +params.gens_gnomad_pos = WorkflowMain.getGenomeAttribute(params, 'gens_gnomad_pos') params.gnomad_af = WorkflowMain.getGenomeAttribute(params, 'gnomad_af') params.gnomad_af_idx = WorkflowMain.getGenomeAttribute(params, 'gnomad_af_idx') params.intervals_wgs = WorkflowMain.getGenomeAttribute(params, 'intervals_wgs') @@ -33,13 +37,14 @@ params.known_indels = WorkflowMain.getGenomeAttribute(params, params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') params.mt_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_fasta') +params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 'ploidy_model') params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') +params.readcount_intervals = WorkflowMain.getGenomeAttribute(params, 'readcount_intervals') params.sequence_dictionary = WorkflowMain.getGenomeAttribute(params, 'sequence_dictionary') params.score_config_snv = WorkflowMain.getGenomeAttribute(params, 'score_config_snv') params.score_config_sv = WorkflowMain.getGenomeAttribute(params, 'score_config_sv') -params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') -params.blacklist_bed = WorkflowMain.getGenomeAttribute(params, 'blacklist_bed') params.svdb_query_dbs = WorkflowMain.getGenomeAttribute(params, 'svdb_query_dbs') +params.target_bed = WorkflowMain.getGenomeAttribute(params, 'target_bed') params.variant_catalog = WorkflowMain.getGenomeAttribute(params, 'variant_catalog') params.vep_filters = WorkflowMain.getGenomeAttribute(params, 'vep_filters') params.vcfanno_resources = WorkflowMain.getGenomeAttribute(params, 'vcfanno_resources') @@ -47,11 +52,6 @@ params.vcfanno_toml = WorkflowMain.getGenomeAttribute(params, params.vcfanno_lua = WorkflowMain.getGenomeAttribute(params, 'vcfanno_lua') params.vep_cache = WorkflowMain.getGenomeAttribute(params, 'vep_cache') params.vep_cache_version = WorkflowMain.getGenomeAttribute(params, 'vep_cache_version') -params.gens_interval_list = WorkflowMain.getGenomeAttribute(params, 'gens_interval_list') -params.gens_pon = WorkflowMain.getGenomeAttribute(params, 'gens_pon') -params.gens_gnomad_pos = WorkflowMain.getGenomeAttribute(params, 'gens_gnomad_pos') -params.ploidy_model = WorkflowMain.getGenomeAttribute(params, 'ploidy_model') -params.gcnvcaller_model = WorkflowMain.getGenomeAttribute(params, 'gcnvcaller_model') /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/nextflow.config b/nextflow.config index ae1adc93..9e3b3fa2 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,6 +24,7 @@ params { analysis_type = 'wgs' bait_padding = 100 save_mapped_as_cram = false + skip_cnv_calling = false skip_snv_annotation = false skip_sv_annotation = false skip_mt_analysis = false diff --git a/nextflow_schema.json b/nextflow_schema.json index 3590d923..bb397a7e 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -81,13 +81,6 @@ "fa_icon": "far fa-file-code", "hidden": true }, - "dict": { - "type": "string", - "default": "None", - "hidden": true, - "fa_icon": "far fa-file-code", - "format": "file-path" - }, "igenomes_base": { "type": "string", "format": "directory-path", @@ -256,15 +249,6 @@ "help_text": "If you would like to limit your analysis to specific regions of the genome, you can pass those regions in a bed file using this option", "hidden": true }, - "blacklist_bed": { - "type": "string", - "fa_icon": "fas fa-bezier-curve", - "description": "Path to directory for blacklist bed file.", - "help_text": "If you would like to limit your analysis to exclude specific regions of the genome, you can pass those regions in a bed file using this option", - "hidden": true, - "default": "None", - "format": "file-path" - }, "svdb_query_dbs": { "type": "string", "format": "file-path", @@ -325,7 +309,7 @@ "gens_interval_list": { "type": "string", "format": "file-path", - "default": "None", + "default": null, "fa_icon": "fas fa-bezier-curve", "description": "Path to interval list for Gens.", "help_text": "This file contains the binning intervals used for CollectReadCounts.", @@ -334,7 +318,7 @@ "gens_pon": { "type": "string", "format": "file-path", - "default": "None", + "default": null, "fa_icon": "far fa-file-code", "description": "Path to panel of normals for Gens.", "help_text": "The panel used to run DenoiseReadCounts.", @@ -343,29 +327,38 @@ "gens_gnomad_pos": { "type": "string", "format": "file-path", - "default": "None", + "default": null, "fa_icon": "far fa-bezier-curve", "description": "Path to a list of common SNP locations for Gens.", "help_text": "Locations of gnomad SNPs with a high enough BAF.", "hidden": true }, + "readcount_intervals": { + "type": "string", + "fa_icon": "fas fa-folder-open", + "description": "Interval list file containing the intervals over which read counts are tabulated for CNV calling", + "hidden": true, + "format": "file-path", + "default": null, + "help_text": "Generated by GATK4 preprocessintervals. If absent, pipeline can generate this file." + }, "ploidy_model": { "type": "string", "fa_icon": "fas fa-folder-open", - "description": "Tar gzipped directory containing the ploidy model files", + "description": "Directory containing the ploidy model files", "hidden": true, - "format": "path", - "default": "None", + "format": "directory-path", + "default": null, "help_text": "Produced in GATK4 DetermineGermlineContigPloidy cohort, this model is required for generating a cnv model when using GermlineCNVCaller." }, "gcnvcaller_model": { "type": "string", "fa_icon": "fas fa-folder-open", - "description": "Tar gzipped directory containing the cnv model files", + "description": "A file containing the path to models produced by GATK4 GermlineCNVCaller cohort.", "hidden": true, - "format": "path", - "default": "None", - "help_text": "Produced in GATK4 DetermineGermlineContigPloidy cohort, this model is required for generating a cnv calls when using GermlineCNVCaller." + "format": "file-path", + "default": null, + "help_text": "This model is required for generating a cnv calls when using GermlineCNVCaller." } } }, @@ -388,6 +381,11 @@ "description": "Specifies whether to generate and publish alignment files as cram instead of bam", "fa_icon": "fas fa-book" }, + "skip_cnv_calling": { + "type": "boolean", + "description": "Specifies whether or not to skip CNV calling.", + "fa_icon": "fas fa-book" + }, "skip_snv_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotate SNV subworkflow.", diff --git a/subworkflows/local/call_structural_variants.nf b/subworkflows/local/call_structural_variants.nf index 49fb0a43..65016260 100644 --- a/subworkflows/local/call_structural_variants.nf +++ b/subworkflows/local/call_structural_variants.nf @@ -20,7 +20,7 @@ workflow CALL_STRUCTURAL_VARIANTS { ch_case_info // channel: [mandatory] [ val(case_info) ] ch_target_bed // channel: [mandatory for WES] [ val(meta), path(bed), path(tbi) ] ch_genome_dictionary // channel: [optional; used by mandatory for GATK's cnvcaller][ val(meta), path(dict) ] - ch_blacklist_bed // channel: [optional; used by mandatory for GATK's cnvcaller][ path(blacklist_bed) ] + ch_svcaller_priority // channel: [mandatory] [ val(["var caller tag 1", ...]) ] ch_readcount_intervals // channel: [optional; used by mandatory for GATK's cnvcaller][ path(intervals) ] ch_ploidy_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(ploidy_model) ] ch_gcnvcaller_model // channel: [optional; used by mandatory for GATK's cnvcaller][ path(gcnvcaller_model) ] @@ -38,23 +38,30 @@ workflow CALL_STRUCTURAL_VARIANTS { .collect{it[1]} .set { tiddit_vcf } - CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_blacklist_bed, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) + CALL_SV_GERMLINECNVCALLER (ch_bam_bai, ch_genome_fasta, ch_genome_fai, ch_readcount_intervals, ch_genome_dictionary, ch_ploidy_model, ch_gcnvcaller_model) .genotyped_intervals_vcf .collect{it[1]} .set { gcnvcaller_vcf } //merge - tiddit_vcf - .combine(manta_vcf) - .combine(gcnvcaller_vcf) - .toList() - .set { vcf_list } + if (params.skip_cnv_calling) { + tiddit_vcf + .combine(manta_vcf) + .toList() + .set { vcf_list } + } else { + tiddit_vcf + .combine(manta_vcf) + .combine(gcnvcaller_vcf) + .toList() + .set { vcf_list } + } ch_case_info .combine(vcf_list) .set { merge_input_vcfs } - SVDB_MERGE (merge_input_vcfs, ["tiddit","manta","gcnvcaller"]) + SVDB_MERGE (merge_input_vcfs, ch_svcaller_priority) TABIX_TABIX (SVDB_MERGE.out.vcf) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 04853861..92d4b03f 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -13,7 +13,6 @@ workflow CALL_SV_GERMLINECNVCALLER { ch_fasta // channel: [mandatory][ val(meta), path(ch_fasta_no_meta) ] ch_fai // channel: [mandatory][ val(meta), path(ch_fai) ] ch_readcount_intervals // channel: [mandatory][ val(meta), path(bed), path(tbi) ] - ch_blacklist_bed // channel: [mandatory][ val(meta), path(ch_blacklist_bed) ] ch_genome_dictionary // channel: [mandatory][ val(meta), path(ch_dict) ] ch_ploidy_model // channel: [mandatory][ path(ch_ploidy_model) ] ch_gcnvcaller_model // channel: [mandatory][ path(ch_gcnvcaller_model) ] @@ -60,6 +59,7 @@ workflow CALL_SV_GERMLINECNVCALLER { versions = ch_versions // channel: [ versions.yml ] } +// This function groups calls with same meta for postprocessing. def reduce_input (List gcnvoutput) { def dictionary = [:] def reducedList = [] diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index b3fd51ef..34e67e3e 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -92,6 +92,10 @@ if (params.variant_caller.equals("sentieon")) { mandatoryParams += ["ml_model"] } +if (!params.skip_cnv_calling) { + mandatoryParams += ["ploidy_model", "gcnvcaller_model"] +} + def missingParamsCount = 0 for (param in mandatoryParams.unique()) { if (params[param] == null) { @@ -101,7 +105,7 @@ for (param in mandatoryParams.unique()) { } if (missingParamsCount>0) { - error("\nSet missing parameters and restart the run.") + error("\nSet missing parameters and restart the run. For more information please check usage documentation on github.") } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -207,11 +211,7 @@ workflow RAREDISEASE { .set { ch_references } // Gather built indices or get them from the params - ch_readcount_intervals = params.readcount_intervals ? Channel.fromPath(params.readcount_intervals).collect() - : ( ch_references.readcount_intervals ?: Channel.empty() ) ch_bait_intervals = ch_references.bait_intervals - ch_blacklist_bed = params.blacklist_bed ? Channel.fromPath(params.blacklist_bed).map{ it -> [[id:it[0].simpleName], it] }.collect() - : ( ch_references.blacklist_bed ?: Channel.empty() ) ch_cadd_header = Channel.fromPath("$projectDir/assets/cadd_to_vcf_header_-1.0-.txt", checkIfExists: true).collect() ch_cadd_resources = params.cadd_resources ? Channel.fromPath(params.cadd_resources).collect() : Channel.value([]) @@ -251,7 +251,9 @@ workflow RAREDISEASE { ch_mtshift_fasta = ch_references.mtshift_fasta ch_mtshift_intervals = ch_references.mtshift_intervals ch_ploidy_model = params.ploidy_model ? Channel.fromPath(params.ploidy_model).map{ it -> [[id:it[0].simpleName], it] }.collect() - : ( ch_references.ploidy_model ?: Channel.empty() ) + : Channel.empty() + ch_readcount_intervals = params.readcount_intervals ? Channel.fromPath(params.readcount_intervals).collect() + : ( ch_references.readcount_intervals ?: Channel.empty() ) ch_reduced_penetrance = params.reduced_penetrance ? Channel.fromPath(params.reduced_penetrance).collect() : Channel.value([]) ch_score_config_snv = params.score_config_snv ? Channel.fromPath(params.score_config_snv).collect() @@ -278,6 +280,13 @@ workflow RAREDISEASE { // Generate pedigree file ch_pedfile = CHECK_INPUT.out.samples.toList().map { makePed(it) } + // SV caller priority + if (params.skip_cnv_calling) { + ch_svcaller_priority = Channel.value(["tiddit", "manta"]) + } else { + ch_svcaller_priority = Channel.value(["tiddit", "manta", "gcnvcaller"]) + } + // Input QC FASTQC (CHECK_INPUT.out.reads) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) @@ -375,7 +384,7 @@ workflow RAREDISEASE { CHECK_INPUT.out.case_info, ch_target_bed, ch_genome_dictionary, - ch_blacklist_bed, + ch_svcaller_priority, ch_readcount_intervals, ch_ploidy_model, ch_gcnvcaller_model From 6f589bb4b27ac8506386dbbfa95a2a28b7c5c058 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:18:58 +0200 Subject: [PATCH 122/136] update usage --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index 0531a198..dfd3566c 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -197,7 +197,7 @@ The mandatory and optional parameters for each category are tabulated below. | gcnvcaller_model1 | | 1 Output from steps 3 & 4 of GATK's CNV calling pipeline run in cohort mode as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). -2 Output from either step 1 or 2 of GATK's CNV calling pipeline as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). +2 Output from step 1 of GATK's CNV calling pipeline as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). ##### 7. SNV annotation & Ranking From e39caf581748c24d6761d367fafeedbbf5493d63 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 6 Jul 2023 08:52:56 +0200 Subject: [PATCH 123/136] update sample --- docs/usage.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/usage.md b/docs/usage.md index dfd3566c..ec106d1b 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -191,13 +191,14 @@ The mandatory and optional parameters for each category are tabulated below. ##### 6. Copy number variant calling -| Mandatory | Optional | -| ---------------------------- | ------------------------------- | -| ploidy_model1 | readcount_intervals2 | -| gcnvcaller_model1 | | - -1 Output from steps 3 & 4 of GATK's CNV calling pipeline run in cohort mode as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). -2 Output from step 1 of GATK's CNV calling pipeline as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants). +| Mandatory | Optional | +| ------------------------------ | ------------------------------- | +| ploidy_model1 | readcount_intervals3 | +| gcnvcaller_model1,2 | | + +1 Output from steps 3 & 4 of GATK's CNV calling pipeline run in cohort mode as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants).
    +2 Sample file can be found [here](https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gcnvmodels.tsv). Note the header.
    +3 Output from step 1 of GATK's CNV calling pipeline as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants).
    ##### 7. SNV annotation & Ranking From d08a95f5c026d95e9a7d0e0b71b27a9b9bc27640 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 6 Jul 2023 08:56:27 +0200 Subject: [PATCH 124/136] format usage --- docs/usage.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage.md b/docs/usage.md index ec106d1b..5b7f7aa6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -197,7 +197,7 @@ The mandatory and optional parameters for each category are tabulated below. | gcnvcaller_model1,2 | | 1 Output from steps 3 & 4 of GATK's CNV calling pipeline run in cohort mode as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants).
    -2 Sample file can be found [here](https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gcnvmodels.tsv). Note the header.
    +2 Sample file can be found [here](https://raw.githubusercontent.com/nf-core/test-datasets/raredisease/reference/gcnvmodels.tsv) (Note the header 'models' in the sample file).
    3 Output from step 1 of GATK's CNV calling pipeline as described [here](https://gatk.broadinstitute.org/hc/en-us/articles/360035531152--How-to-Call-common-and-rare-germline-copy-number-variants).
    ##### 7. SNV annotation & Ranking From 14f8869b691ab0caae0f58d215c9dd8c0a770f05 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Thu, 6 Jul 2023 12:02:52 +0200 Subject: [PATCH 125/136] remove hidden --- nextflow_schema.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index bb397a7e..d8fc0111 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -346,7 +346,6 @@ "type": "string", "fa_icon": "fas fa-folder-open", "description": "Directory containing the ploidy model files", - "hidden": true, "format": "directory-path", "default": null, "help_text": "Produced in GATK4 DetermineGermlineContigPloidy cohort, this model is required for generating a cnv model when using GermlineCNVCaller." @@ -355,7 +354,6 @@ "type": "string", "fa_icon": "fas fa-folder-open", "description": "A file containing the path to models produced by GATK4 GermlineCNVCaller cohort.", - "hidden": true, "format": "file-path", "default": null, "help_text": "This model is required for generating a cnv calls when using GermlineCNVCaller." From faff4947abbb24ba2fe5602cd871ebac24e73477 Mon Sep 17 00:00:00 2001 From: asp8200 Date: Thu, 6 Jul 2023 12:04:22 +0000 Subject: [PATCH 126/136] Updating changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13232758..074807bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - eKLIPse to identify large mitochondrial deletions [#365](https://github.com/nf-core/raredisease/pull/365) - UPD+Chromograph to identify and visualize UPD sites and regions in the chromosomes [#364](https://github.com/nf-core/raredisease/pull/364) and [#366](https://github.com/nf-core/raredisease/pull/366) +### Fixed + +- Avoiding publishing uncompressed VCF-file from `HMTNOTE_ANNOTATE`. (The corresponding compressed VCF-file still gets published.) [#368](https://github.com/nf-core/raredisease/pull/368) + ## v1.0.0 - [2023-06-01] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. From 900af1bffaafa48ead9b7d768f38297d64f11911 Mon Sep 17 00:00:00 2001 From: EmmaCAndersson <46917861+EmmaCAndersson@users.noreply.github.com> Date: Fri, 7 Jul 2023 13:27:05 +0200 Subject: [PATCH 127/136] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 074807bd..0a0f4119 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - MT del script to detect mitochondrial deletions [#349](https://github.com/nf-core/raredisease/pull/349) - eKLIPse to identify large mitochondrial deletions [#365](https://github.com/nf-core/raredisease/pull/365) - UPD+Chromograph to identify and visualize UPD sites and regions in the chromosomes [#364](https://github.com/nf-core/raredisease/pull/364) and [#366](https://github.com/nf-core/raredisease/pull/366) +- Added check for presence of case id for each sample in samplesheet [#357](https://github.com/nf-core/raredisease/pull/357) ### Fixed From 66efabc345205ca5e3288b520544ca648ed0d6f0 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 7 Jul 2023 13:33:00 +0200 Subject: [PATCH 128/136] review suggestions --- conf/modules/prepare_references.config | 4 ++-- docs/output.md | 2 -- .../local/variant_calling/call_sv_germlinecnvcaller.nf | 8 ++++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/conf/modules/prepare_references.config b/conf/modules/prepare_references.config index d9d7173d..7d40508c 100644 --- a/conf/modules/prepare_references.config +++ b/conf/modules/prepare_references.config @@ -119,12 +119,12 @@ process { } withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WGS' { - ext.args = { "--padding 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } + ext.args = { "--padding 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } ext.when = { params.analysis_type.equals("wgs") && !params.readcount_intervals } } withName: '.*PREPARE_REFERENCES:GATK_PREPROCESS_WES' { - ext.args = { "--bin-length 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } + ext.args = { "--bin-length 0 --interval-merging-rule OVERLAPPING_ONLY --exclude-intervals ${params.mito_name}" } ext.when = { params.analysis_type.equals("wes") && !params.readcount_intervals } } diff --git a/docs/output.md b/docs/output.md index 8e822002..028423e8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,8 +10,6 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: -#### GATK GermlineCNVCaller (CNV calling) - - [Alignment](#alignment) - [Mapping](#mapping) - [Bwa-mem2](#bwa-mem2) diff --git a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf index 92d4b03f..029c0db5 100644 --- a/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf +++ b/subworkflows/local/variant_calling/call_sv_germlinecnvcaller.nf @@ -1,6 +1,6 @@ -#!/usr/bin/env nextflow - -nextflow.enable.dsl = 2 +// +// A variant caller workflow for GATK's GermlinceCNVCaller +// include { GATK4_COLLECTREADCOUNTS } from '../../../modules/nf-core/gatk4/collectreadcounts/main.nf' include { GATK4_DETERMINEGERMLINECONTIGPLOIDY } from '../../../modules/nf-core/gatk4/determinegermlinecontigploidy/main.nf' @@ -25,9 +25,9 @@ workflow CALL_SV_GERMLINECNVCALLER { GATK4_COLLECTREADCOUNTS ( input, ch_fasta, ch_fai, ch_genome_dictionary ) GATK4_COLLECTREADCOUNTS.out.tsv - .groupTuple() .map({ meta, tsv -> return [meta, tsv, [], [] ]}) .set{ch_dgcp_in} + GATK4_DETERMINEGERMLINECONTIGPLOIDY ( ch_dgcp_in, ch_ploidy_model, [] ) GATK4_COLLECTREADCOUNTS.out.tsv From 2e976204ee8c5fde72d2230d8ae69c90ea81268d Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 7 Jul 2023 15:11:41 +0200 Subject: [PATCH 129/136] update schema --- docs/output.md | 12 +- main.nf | 2 - nextflow_schema.json | 318 +++++++++++++++++---------------------- workflows/raredisease.nf | 8 +- 4 files changed, 144 insertions(+), 196 deletions(-) diff --git a/docs/output.md b/docs/output.md index 856b0a79..bbbfa2cb 100644 --- a/docs/output.md +++ b/docs/output.md @@ -75,27 +75,27 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d ##### Picard's MarkDuplicates -[Picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) is used for marking PCR duplicates that can occur during library amplification. This is essential as the presence of such duplicates results in false inflated coverages, which in turn can lead to overly-confident genotyping calls during variant calling. Only reads aligned by Bwa-mem2 are processed by this tool. +[Picard MarkDuplicates](https://broadinstitute.github.io/picard/command-line-overview.html#MarkDuplicates) is used for marking PCR duplicates that can occur during library amplification. This is essential as the presence of such duplicates results in false inflated coverages, which in turn can lead to overly-confident genotyping calls during variant calling. Only reads aligned by Bwa-mem2 are processed by this tool. By default, alignment files are published in bam format. If you would like to store cram files instead, set `--save_mapped_as_cram` to true.
    Output files from Alignment - `{outputdir}/alignment/` - - `*.bam`: Bam file containing report containing quality metrics. - - `*.bai`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + - `*.bam|*.cram`: Alignment file in bam/cram format. + - `*.bai|*.crai`: Index of the corresponding bam/cram file. - `*.txt`: Text file containing the dedup metrics.
    ##### Sentieon Dedup -[Sentieon Dedup](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#remove-or-mark-duplicates) is the algorithm used by Sentieon's driver to remove duplicate reads. Only reads aligned by Sentieon's implementation of bwa are processed by this algorithm. +[Sentieon Dedup](https://support.sentieon.com/manual/DNAseq_usage/dnaseq/#remove-or-mark-duplicates) is the algorithm used by Sentieon's driver to remove duplicate reads. Only reads aligned by Sentieon's implementation of bwa are processed by this algorithm. By default, alignment files are published in bam format. If you would like to store cram files instead, set `--save_mapped_as_cram` to true.
    Output files from Alignment - `{outputdir}/alignment/` - - `*.bam`: Bam file containing report containing quality metrics. - - `*.bai`: Zip archive containing the FastQC report, tab-delimited data file and plot images. + - `*.bam|*.cram`: Alignment file in bam/cram format. + - `*.bai|*.crai`: Index of the corresponding bam/cram file. - `*.txt`: Text file containing the dedup metrics.
    diff --git a/main.nf b/main.nf index 47f00e53..0f31ba94 100644 --- a/main.nf +++ b/main.nf @@ -29,8 +29,6 @@ params.intervals_wgs = WorkflowMain.getGenomeAttribute(params, params.intervals_y = WorkflowMain.getGenomeAttribute(params, 'intervals_y') params.known_dbsnp = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp') params.known_dbsnp_tbi = WorkflowMain.getGenomeAttribute(params, 'known_dbsnp_tbi') -params.known_indels = WorkflowMain.getGenomeAttribute(params, 'known_indels') -params.known_mills = WorkflowMain.getGenomeAttribute(params, 'known_mills') params.ml_model = WorkflowMain.getGenomeAttribute(params, 'ml_model') params.mt_fasta = WorkflowMain.getGenomeAttribute(params, 'mt_fasta') params.reduced_penetrance = WorkflowMain.getGenomeAttribute(params, 'reduced_penetrance') diff --git a/nextflow_schema.json b/nextflow_schema.json index 51b4586a..1fbdbf68 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -33,17 +33,19 @@ "description": "Email address for completion summary.", "fa_icon": "fas fa-envelope", "help_text": "Set this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.", - "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$" + "pattern": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", + "hidden": true }, "multiqc_title": { "type": "string", "description": "MultiQC report title. Printed as page header, used for filename if not otherwise specified.", - "fa_icon": "fas fa-file-signature" + "fa_icon": "fas fa-file-signature", + "hidden": true } } }, - "reference_genome_options": { - "title": "Reference genome options", + "reference_file_options": { + "title": "Reference file options", "type": "object", "fa_icon": "fas fa-dna", "description": "Reference genome related files and options required for the workflow.", @@ -51,26 +53,30 @@ "bait_padding": { "type": "number", "default": 100, - "fa_icon": "fas fa-greater-than", + "fa_icon": "fas fa-align-center", "pattern": "^\\S+\\.bed(\\.gz)?$", - "description": "The amount to pad each end of the target intervals to create bait intervals.", - "hidden": true + "description": "The amount to pad each end of the target intervals to create bait intervals." }, - "genome": { + "bwa": { "type": "string", - "description": "Name of iGenomes reference.", - "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "format": "directory-path", + "description": "Directory for pre-built bwa index.", + "help_text": "If none provided, will be generated automatically from the FASTA reference.", + "fa_icon": "fas fa-folder-open" }, - "fasta": { + "bwamem2": { "type": "string", - "format": "file-path", - "exists": true, - "mimetype": "text/plain", - "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", - "description": "Path to FASTA genome file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", - "fa_icon": "far fa-file-code" + "format": "directory-path", + "description": "Directory for pre-built bwamem2 index.", + "help_text": "If none provided, will be generated automatically from the FASTA reference.", + "fa_icon": "fas fa-folder-open" + }, + "cadd_resources": { + "type": "string", + "format": "directory-path", + "fa_icon": "fas fa-file", + "description": "Path to the directory containing cadd annotations.", + "help_text": "This folder contains the uncompressed files that would otherwise be in data/annotation folder as described in https://github.com/kircherlab/CADD-scripts/#manual-installation." }, "fai": { "type": "string", @@ -78,46 +84,48 @@ "help_text": "If none provided, will be generated automatically from the FASTA reference", "description": "Path to FASTA genome index file.", "pattern": "^\\S+\\.fn?a(sta)?\\.fai$", - "fa_icon": "far fa-file-code", - "hidden": true + "fa_icon": "fas fa-file" }, - "igenomes_base": { + "fasta": { "type": "string", - "format": "directory-path", - "description": "Directory / URL base for iGenomes references.", - "default": "s3://ngi-igenomes/igenomes", - "fa_icon": "fas fa-cloud-download-alt", - "hidden": true + "format": "file-path", + "exists": true, + "mimetype": "text/plain", + "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", + "description": "Path to FASTA genome file.", + "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "fa_icon": "fas fa-file" }, - "igenomes_ignore": { - "type": "boolean", - "description": "Do not load the iGenomes reference config.", - "fa_icon": "fas fa-ban", - "hidden": true, - "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + "genome": { + "type": "string", + "description": "Name of iGenomes reference.", + "fa_icon": "fas fa-align-center", + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details.", + "default": "GRCh38" }, - "bwa": { + "gens_gnomad_pos": { "type": "string", - "format": "directory-path", - "description": "Directory for pre-built bwa index.", - "help_text": "If none provided, will be generated automatically from the FASTA reference.", - "fa_icon": "fas fa-folder-open", + "format": "file-path", + "fa_icon": "fas fa-file", + "description": "Path to a list of common SNP locations for Gens.", + "help_text": "Locations of gnomad SNPs with a high enough BAF.", "hidden": true }, - "bwamem2": { + "gens_interval_list": { "type": "string", - "format": "directory-path", - "description": "Directory for pre-built bwamem2 index.", - "help_text": "If none provided, will be generated automatically from the FASTA reference.", - "fa_icon": "fas fa-folder-open", + "format": "file-path", + "fa_icon": "fas fa-file", + "description": "Path to interval list for Gens.", + "help_text": "This file contains the binning intervals used for CollectReadCounts.", "hidden": true }, - "cadd_resources": { + "gens_pon": { "type": "string", - "format": "directory-path", + "format": "file-path", "fa_icon": "fas fa-file", - "description": "Path to the directory containing cadd annotations.", - "help_text": "This folder contains the uncompressed files that would otherwise be in data/annotation folder as described in https://github.com/kircherlab/CADD-scripts/#manual-installation." + "description": "Path to panel of normals for Gens.", + "help_text": "The panel used to run DenoiseReadCounts.", + "hidden": true }, "gnomad_af": { "type": "string", @@ -135,6 +143,19 @@ "description": "Path to the index file for the gnomad tab file with allele frequencies.", "help_text": "Path to the index of gnomad tab file with CHR/START/REF,ALT/AF" }, + "igenomes_base": { + "type": "string", + "format": "directory-path", + "description": "Directory / URL base for iGenomes references.", + "default": "s3://ngi-igenomes/igenomes", + "fa_icon": "fas fa-cloud-download-alt" + }, + "igenomes_ignore": { + "type": "boolean", + "description": "Do not load the iGenomes reference config.", + "fa_icon": "fas fa-ban", + "help_text": "Do not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`." + }, "intervals_wgs": { "type": "string", "format": "path", @@ -151,50 +172,39 @@ "description": "Path to the interval list of the Y chromosome.", "help_text": "Path to the interval list of the Y chromosome. This is used to calculate coverage statistics for the Y chromosome." }, - "mito_name": { - "type": "string", - "format": "path", - "description": "Name of the mitochondrial contig in the reference fasta file", - "help_text": "Used to extract relevant information from the references to analyse mitochondria" - }, "known_dbsnp": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", + "fa_icon": "fas fa-file", "pattern": "^\\S+\\.vcf(\\.gz)?$", - "description": "Path to known dbSNP file.", - "hidden": true + "description": "Path to known dbSNP file." }, "known_dbsnp_tbi": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", + "fa_icon": "fas fa-file", "pattern": "^\\S+\\.vcf(\\.gz)?\\.tbi$", - "description": "Path to known dbSNP file index.", - "hidden": true + "description": "Path to known dbSNP file index." }, - "known_indels": { + "local_genomes": { "type": "string", - "format": "path", - "fa_icon": "fas fa-chart-bar", - "pattern": "^\\S+\\.vcf(\\.gz)?$", - "description": "Path to known indels file.", - "hidden": true + "format": "directory-path", + "fa_icon": "fas fa-map-marker-alt", + "description": "Local directory base for genome references that map to the config.", + "help_text": "This folder is a flat structure with file names that map to the config." }, - "known_mills": { + "mito_name": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", - "pattern": "^\\S+\\.vcf(\\.gz)?$", - "description": "Path to known Mills file.", - "hidden": true + "description": "Name of the mitochondrial contig in the reference fasta file", + "help_text": "Used to extract relevant information from the references to analyse mitochondria", + "fa_icon": "fas fa-align-center" }, "ml_model": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "Path to sentieon machine learning model file.", - "hidden": true + "fa_icon": "fas fa-file", + "description": "Path to sentieon machine learning model file." }, "mt_fasta": { "type": "string", @@ -202,90 +212,80 @@ "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to mitochondrial FASTA genome file.", - "fa_icon": "far fa-file-code" + "fa_icon": "fas fa-file" }, "reduced_penetrance": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "File with gene ids that have reduced penetrance. For use with genmod", - "hidden": true + "fa_icon": "fas fa-file-csv", + "description": "File with gene ids that have reduced penetrance. For use with genmod" + }, + "save_reference": { + "type": "boolean", + "description": "If generated by the pipeline save the required indices/references in the results directory.", + "help_text": "The saved references can be used for future pipeline runs, reducing processing times.", + "fa_icon": "fas fa-save" }, "score_config_snv": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "SNV rank model config file for genmod.", - "hidden": true + "fa_icon": "fas fa-file", + "description": "SNV rank model config file for genmod." }, "score_config_sv": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "SV rank model config file for genmod.", - "hidden": true + "fa_icon": "fas fa-file", + "description": "SV rank model config file for genmod." }, "sequence_dictionary": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", + "fa_icon": "fas fa-file", "pattern": "^\\S+\\.dict$", - "description": "Genome dictionary file", - "hidden": true + "description": "Path to the genome dictionary file" }, - "vep_filters": { + "svdb_query_dbs": { "type": "string", - "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "File containing HGNC_IDs of interest on separate lines.", - "hidden": true + "format": "file-path", + "description": "Databases used for structural variant annotation.", + "fa_icon": "fas fa-file-csv", + "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation." }, "target_bed": { "type": "string", "format": "path", - "fa_icon": "fas fa-bezier-curve", + "fa_icon": "fas fa-file", "pattern": "^\\S+\\.bed(\\.gz)?$", "description": "Path to directory for target bed file.", - "help_text": "If you would like to limit your analysis to specific regions of the genome, you can pass those regions in a bed file using this option", - "hidden": true - }, - "svdb_query_dbs": { - "type": "string", - "format": "file-path", - "description": "Databases used for structural variant annotation.", - "fa_icon": "far fa-file-code", - "help_text": "Path to comma-separated file containing information about the databases used for structural variant annotation." + "help_text": "If you would like to limit your analysis to specific regions of the genome, you can pass those regions in a bed file using this option" }, "variant_catalog": { "type": "string", "format": "file-path", "description": "Path to variant catalog file", "help_text": "Used with ExpansionHunter and if no catalogue is passed, then a default will be used.", - "fa_icon": "far fa-file-code", - "hidden": true + "fa_icon": "fas fa-file" }, "vcfanno_resources": { "type": "string", - "description": "Text file containing the absolute paths to resources defined within the vcfanno toml file. One line per resource.", + "description": "Path to a file containing the absolute paths to resources defined within the vcfanno toml file. One line per resource.", "help_text": "If no file is passed, default configurations will be used according to genome build within the context of the pipeline.", - "fa_icon": "fas fa-folder-open", - "hidden": true + "fa_icon": "fas fa-file" }, "vcfanno_toml": { "type": "string", "description": "Path to the vcfanno toml file.", "pattern": "^\\S+\\.toml$", "help_text": "If no toml is passed, default configurations will be used according to genome build within the context of the pipeline.", - "fa_icon": "fas fa-file-csv", - "hidden": true + "fa_icon": "fas fa-file" }, "vcfanno_lua": { "type": "string", "description": "Path to the vcfanno lua file.", "pattern": "^\\S+\\.lua$", "help_text": "Custom operations file (lua). For use when the built-in ops don't supply the needed reduction.", - "fa_icon": "fas fa-file-code", - "hidden": true + "fa_icon": "fas fa-file" }, "vep_cache": { "type": "string", @@ -293,47 +293,14 @@ "help_text": "If no directory path is passed, vcf files will not be annotated by vep.", "fa_icon": "fas fa-folder-open" }, - "save_reference": { - "type": "boolean", - "description": "If generated by the pipeline save the required indices/references in the results directory.", - "help_text": "The saved references can be used for future pipeline runs, reducing processing times.", - "fa_icon": "fas fa-save" - }, - "local_genomes": { - "type": "string", - "format": "directory-path", - "fa_icon": "fas fa-map-marker-alt", - "description": "Local directory base for genome references that map to the config.", - "help_text": "This folder is a flat structure with file names that map to the config." - }, - "gens_interval_list": { - "type": "string", - "format": "file-path", - "default": null, - "fa_icon": "fas fa-bezier-curve", - "description": "Path to interval list for Gens.", - "help_text": "This file contains the binning intervals used for CollectReadCounts.", - "hidden": true - }, - "gens_pon": { - "type": "string", - "format": "file-path", - "default": null, - "fa_icon": "far fa-file-code", - "description": "Path to panel of normals for Gens.", - "help_text": "The panel used to run DenoiseReadCounts.", - "hidden": true - }, - "gens_gnomad_pos": { + "vep_filters": { "type": "string", - "format": "file-path", - "default": null, - "fa_icon": "far fa-bezier-curve", - "description": "Path to a list of common SNP locations for Gens.", - "help_text": "Locations of gnomad SNPs with a high enough BAF.", - "hidden": true + "format": "path", + "fa_icon": "fas fa-file-csv", + "description": "Path to the file containing HGNC_IDs of interest on separate lines." } - } + }, + "required": ["fasta", "intervals_wgs", "intervals_y"] }, "analysis_options": { "title": "Analysis options", @@ -345,44 +312,39 @@ "type": "string", "default": "wgs", "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", - "fa_icon": "fas fa-book", + "fa_icon": "fas fa-align-center", "enum": ["wgs", "wes", "mito"] }, "save_mapped_as_cram": { "type": "boolean", - "default": false, "description": "Specifies whether to generate and publish alignment files as cram instead of bam", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-toggle-on" }, "skip_snv_annotation": { "type": "boolean", - "default": false, "description": "Specifies whether or not to skip annotate SNV subworkflow.", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-toggle-on" }, "skip_sv_annotation": { "type": "boolean", - "default": false, "description": "Specifies whether or not to skip annotate structural variant subworkflow.", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-toggle-on" }, "skip_mt_analysis": { "type": "boolean", - "default": false, "description": "Specifies whether or not to skip the subworkflow that analyses mitochondrial genome separate from the nuclear genome.", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-toggle-on" }, "gens_switch": { "type": "boolean", - "default": false, "description": "Specifies whether or not to run gens preprocessing subworkflow.", - "fa_icon": "fas fa-book" + "fa_icon": "fas fa-toggle-on" }, "platform": { "type": "string", "default": "illumina", "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", - "fa_icon": "fas fa-book", + "fa_icon": "fas fa-align-center", "enum": ["illumina"] } } @@ -397,15 +359,13 @@ "type": "string", "default": "bwamem2", "description": "Specifies the alignment algorithm to use - available options are 'bwamem2' and 'sentieon'.", - "fa_icon": "fas fa-map-signs", + "fa_icon": "fas fa-align-center", "enum": ["bwamem2", "sentieon"] }, "rmdup": { "type": "boolean", - "default": false, "description": "Specifies whether duplicates reads should be removed prior to variant calling.", - "fa_icon": "fas fa-map-signs", - "hidden": true + "fa_icon": "fas fa-toggle-on" } } }, @@ -418,28 +378,26 @@ "call_interval": { "type": "string", "format": "path", - "fa_icon": "fas fa-chart-bar", - "description": "Interval in the reference that will be used in the software", - "hidden": true + "fa_icon": "fas fa-align-center", + "description": "Interval in the reference that will be used in the software" }, "pcr_amplification": { "type": "boolean", - "default": false, "description": "Indicates whether the sample library is amplified using PCR or not. Set to false for PCR Free samples.", - "fa_icon": "fas fa-map-signs" + "fa_icon": "fas fa-toggle-on" }, "variant_type": { "type": "string", "default": "snp", "description": "Specifies the variant types for sentieon variant caller.", - "fa_icon": "fas fa-map-signs", + "fa_icon": "fas fa-align-center", "enum": ["snp", "indel", "snp,indel"] }, "variant_caller": { "type": "string", "default": "deepvariant", "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", - "fa_icon": "fas fa-map-signs", + "fa_icon": "fas fa-random", "enum": ["deepvariant", "sentieon"] } } @@ -452,9 +410,9 @@ "properties": { "vep_cache_version": { "type": "integer", - "default": "107", + "default": 107, "description": "Specify the version of the VEP cache provided to the `--vep_cache` option.", - "fa_icon": "fas fa-book", + "fa_icon": "fas fa-align-center", "enum": [107] } } @@ -553,14 +511,12 @@ "type": "boolean", "description": "Display help text.", "fa_icon": "fas fa-question-circle", - "default": false, "hidden": true }, "version": { "type": "boolean", "description": "Display version and exit.", "fa_icon": "fas fa-question-circle", - "default": false, "hidden": true }, "publish_dir_mode": { @@ -584,7 +540,6 @@ "type": "boolean", "description": "Send plain-text email instead of HTML.", "fa_icon": "fas fa-remove-format", - "default": false, "hidden": true }, "max_multiqc_email_size": { @@ -599,7 +554,6 @@ "type": "boolean", "description": "Do not use coloured log outputs.", "fa_icon": "fas fa-palette", - "default": false, "hidden": true }, "hook_url": { @@ -625,7 +579,8 @@ "multiqc_methods_description": { "type": "string", "description": "Custom MultiQC yaml file containing HTML including a methods description.", - "fa_icon": "fas fa-cog" + "fa_icon": "fas fa-cog", + "hidden": true }, "validate_params": { "type": "boolean", @@ -638,7 +593,6 @@ "type": "boolean", "fa_icon": "far fa-eye-slash", "description": "Show all params when using `--help`", - "default": false, "hidden": true, "help_text": "By default, parameters set as _hidden_ in the schema are not shown on the command line when a user runs with `--help`. Specifying this option will tell the pipeline to show all parameters." }, @@ -646,7 +600,6 @@ "type": "boolean", "fa_icon": "far fa-check-circle", "description": "Validation of parameters fails when an unrecognised parameter is found.", - "default": false, "hidden": true, "help_text": "By default, when an unrecognised parameter is found, it returns a warinig." }, @@ -654,7 +607,6 @@ "type": "boolean", "fa_icon": "far fa-check-circle", "description": "Validation of parameters in lenient more.", - "default": false, "hidden": true, "help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)." } @@ -666,7 +618,7 @@ "$ref": "#/definitions/input_output_options" }, { - "$ref": "#/definitions/reference_genome_options" + "$ref": "#/definitions/reference_file_options" }, { "$ref": "#/definitions/analysis_options" diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 7256c568..edf5a6ac 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -28,8 +28,6 @@ def checkPathParamList = [ params.intervals_y, params.known_dbsnp, params.known_dbsnp_tbi, - params.known_indels, - params.known_mills, params.ml_model, params.mt_fasta, params.multiqc_config, @@ -37,14 +35,14 @@ def checkPathParamList = [ params.score_config_snv, params.score_config_sv, params.sequence_dictionary, - params.target_bed, params.svdb_query_dbs, + params.target_bed, params.variant_catalog, - params.vep_filters, params.vcfanno_lua, params.vcfanno_resources, params.vcfanno_toml, - params.vep_cache + params.vep_cache, + params.vep_filters ] for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } From f14a62a21195a771f80338304bfb8b54a2d73a65 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 7 Jul 2023 15:22:30 +0200 Subject: [PATCH 130/136] order --- nextflow_schema.json | 48 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 3e11602d..dce94330 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -336,6 +336,18 @@ "fa_icon": "fas fa-align-center", "enum": ["wgs", "wes", "mito"] }, + "gens_switch": { + "type": "boolean", + "description": "Specifies whether or not to run gens preprocessing subworkflow.", + "fa_icon": "fas fa-toggle-on" + }, + "platform": { + "type": "string", + "default": "illumina", + "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", + "fa_icon": "fas fa-align-center", + "enum": ["illumina"] + }, "save_mapped_as_cram": { "type": "boolean", "description": "Specifies whether to generate and publish alignment files as cram instead of bam", @@ -346,6 +358,11 @@ "description": "Specifies whether or not to skip CNV calling.", "fa_icon": "fas fa-book" }, + "skip_mt_analysis": { + "type": "boolean", + "description": "Specifies whether or not to skip the subworkflow that analyses mitochondrial genome separate from the nuclear genome.", + "fa_icon": "fas fa-toggle-on" + }, "skip_snv_annotation": { "type": "boolean", "description": "Specifies whether or not to skip annotate SNV subworkflow.", @@ -355,23 +372,6 @@ "type": "boolean", "description": "Specifies whether or not to skip annotate structural variant subworkflow.", "fa_icon": "fas fa-toggle-on" - }, - "skip_mt_analysis": { - "type": "boolean", - "description": "Specifies whether or not to skip the subworkflow that analyses mitochondrial genome separate from the nuclear genome.", - "fa_icon": "fas fa-toggle-on" - }, - "gens_switch": { - "type": "boolean", - "description": "Specifies whether or not to run gens preprocessing subworkflow.", - "fa_icon": "fas fa-toggle-on" - }, - "platform": { - "type": "string", - "default": "illumina", - "description": "Specifies which analysis type for the pipeline- either 'wgs','wes','mito'. This changes resources consumed and tools used.", - "fa_icon": "fas fa-align-center", - "enum": ["illumina"] } } }, @@ -412,19 +412,19 @@ "description": "Indicates whether the sample library is amplified using PCR or not. Set to false for PCR Free samples.", "fa_icon": "fas fa-toggle-on" }, - "variant_type": { - "type": "string", - "default": "snp", - "description": "Specifies the variant types for sentieon variant caller.", - "fa_icon": "fas fa-align-center", - "enum": ["snp", "indel", "snp,indel"] - }, "variant_caller": { "type": "string", "default": "deepvariant", "description": "Specifies the variant caller to use - available options are 'deepvariant' and 'sentieon'.", "fa_icon": "fas fa-random", "enum": ["deepvariant", "sentieon"] + }, + "variant_type": { + "type": "string", + "default": "snp", + "description": "Specifies the variant types for sentieon variant caller.", + "fa_icon": "fas fa-align-center", + "enum": ["snp", "indel", "snp,indel"] } } }, From f6f92dae065c1e154be81f1a635a0e7d66f88ea3 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 7 Jul 2023 15:43:10 +0200 Subject: [PATCH 131/136] update module --- modules.json | 2 +- modules/nf-core/eklipse/main.nf | 2 +- modules/nf-core/eklipse/meta.yml | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules.json b/modules.json index d6055073..da9ac319 100644 --- a/modules.json +++ b/modules.json @@ -87,7 +87,7 @@ }, "eklipse": { "branch": "master", - "git_sha": "99d437bd91f8509d0460b7abbde47fa430055ecb", + "git_sha": "39656f68219340420f03bd54a68e111c86e107e6", "installed_by": ["modules"] }, "expansionhunter": { diff --git a/modules/nf-core/eklipse/main.nf b/modules/nf-core/eklipse/main.nf index 022d4832..7b320a4b 100644 --- a/modules/nf-core/eklipse/main.nf +++ b/modules/nf-core/eklipse/main.nf @@ -10,7 +10,7 @@ process EKLIPSE { 'biocontainers/eklipse:1.8--hdfd78af_1' }" input: - tuple val(meta), path(bam) + tuple val(meta), path(bam), path(bai) path ref_gb output: diff --git a/modules/nf-core/eklipse/meta.yml b/modules/nf-core/eklipse/meta.yml index 025ef74d..ee60ef65 100644 --- a/modules/nf-core/eklipse/meta.yml +++ b/modules/nf-core/eklipse/meta.yml @@ -28,6 +28,10 @@ input: type: file description: MT BAM/SAM file pattern: "*.{bam,sam}" + - bai: + type: file + description: MT BAM/SAM index file + pattern: "*.{bai,sai}" - ref_gb: type: file description: mtDNA reference genome in Genbank format, optional if empty NC_012920.1.gb will be used From 8e9eb7b99a55d33d87608f4f070330d0ecdce6ec Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:01:05 +0200 Subject: [PATCH 132/136] address warnings --- modules/local/create_bed_from_fai.nf | 2 +- modules/local/get_chrom_sizes.nf | 2 +- modules/local/mt_deletion_script.nf | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/local/create_bed_from_fai.nf b/modules/local/create_bed_from_fai.nf index ed2a35d2..6b96b6ae 100644 --- a/modules/local/create_bed_from_fai.nf +++ b/modules/local/create_bed_from_fai.nf @@ -5,7 +5,7 @@ process BUILD_BED { conda "anaconda::gawk=5.1.0" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gawk:5.1.0' : - 'quay.io/biocontainers/gawk:5.1.0' }" + 'biocontainers/gawk:5.1.0' }" input: tuple val(meta), path(fasta_fai) diff --git a/modules/local/get_chrom_sizes.nf b/modules/local/get_chrom_sizes.nf index d5dc0a76..4ab80ed1 100644 --- a/modules/local/get_chrom_sizes.nf +++ b/modules/local/get_chrom_sizes.nf @@ -5,7 +5,7 @@ process GET_CHROM_SIZES { conda "conda-forge::coreutils=8.31" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/gnu-wget:1.18--0' : - 'quay.io/biocontainers/gnu-wget:1.18--0' }" + 'biocontainers/gnu-wget:1.18--0' }" input: tuple val(meta), path(fai) diff --git a/modules/local/mt_deletion_script.nf b/modules/local/mt_deletion_script.nf index df586191..02d55876 100644 --- a/modules/local/mt_deletion_script.nf +++ b/modules/local/mt_deletion_script.nf @@ -2,10 +2,10 @@ process MT_DELETION { tag "$meta.id" label 'process_single' - conda "bioconda::samtools=1.16.1" + conda "bioconda::samtools=1.17" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.16.1--h6899075_1' : - 'quay.io/biocontainers/samtools:1.16.1--h6899075_1' }" + 'https://depot.galaxyproject.org/singularity/samtools:1.17--h00cdaf9_0' : + 'biocontainers/samtools:1.17--h00cdaf9_0' }" input: tuple val(meta), path(input), path(input_index) From 253928fcd376a00a8a5295df263b4d73a9a4ec1b Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Mon, 17 Jul 2023 13:22:20 +0200 Subject: [PATCH 133/136] bump version --- CHANGELOG.md | 4 ++-- README.md | 2 +- assets/multiqc_config.yml | 4 ++-- nextflow.config | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc3c002b..204d7a6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.1.0 - [xxxx-xx-xx] +## v1.1.0 - Abu [xxxx-xx-xx] ### `Added` @@ -21,7 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Avoiding publishing uncompressed VCF-file from `HMTNOTE_ANNOTATE`. (The corresponding compressed VCF-file still gets published.) [#368](https://github.com/nf-core/raredisease/pull/368) -## v1.0.0 - [2023-06-01] +## v1.0.0 - Aladdin [2023-06-01] Initial release of nf-core/raredisease, created with the [nf-core](https://nf-co.re/) template. diff --git a/README.md b/README.md index 260cd05e..672230e6 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ For more details about the output files and reports, please refer to the nf-core/raredisease was written in a collaboration between the Clinical Genomics nodes in Sweden, with major contributions from [Ramprasad Neethiraj](https://github.com/ramprasadn), [Anders Jemt](https://github.com/jemten), [Lucia Pena Perez](https://github.com/Lucpen), and [Mei Wu](https://github.com/projectoriented) at Clinical Genomics Stockholm. -Additional contributors were [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid) and [Emma Västerviga](https://github.com/EmmaCAndersson) (Clinical Genomics Gothenburg); [Halfdan Rydbeck](https://github.com/hrydbeck) and [Lauri Mesilaakso](https://github.com/ljmesi) (Clinical Genomics Linköping); [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder) (Clinical Genomics Örebro); [Annick Renevey](https://github.com/rannick) and [Peter Pruisscher](https://github.com/peterpru) (Clinical Genomics Stockholm); [Ryan Kennedy](https://github.com/ryanjameskennedy) (Clinical Genomics Lund); and [Lucas Taniguti](https://github.com/lmtani). +Additional contributors were [Sima Rahimi](https://github.com/sima-r), [Gwenna Breton](https://github.com/Gwennid) and [Emma Västerviga](https://github.com/EmmaCAndersson) (Clinical Genomics Gothenburg); [Halfdan Rydbeck](https://github.com/hrydbeck) and [Lauri Mesilaakso](https://github.com/ljmesi) (Clinical Genomics Linköping); [Subazini Thankaswamy Kosalai](https://github.com/sysbiocoder) (Clinical Genomics Örebro); [Annick Renevey](https://github.com/rannick) and [Peter Pruisscher](https://github.com/peterpru) (Clinical Genomics Stockholm); [Ryan Kennedy](https://github.com/ryanjameskennedy) (Clinical Genomics Lund); [Anders Sune Pedersen](https://github.com/asp8200) (Danish National Genome Center) and [Lucas Taniguti](https://github.com/lmtani). We thank the nf-core community for their extensive assistance in the development of this pipeline. diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index a32647a3..8388320b 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -3,9 +3,9 @@ custom_logo_url: https://github.com/nf-core/raredisease/ custom_logo_title: "nf-core/raredisease" report_comment: > - This report has been generated by the nf-core/raredisease + This report has been generated by the nf-core/raredisease analysis pipeline. For information about how to interpret these results, please see the - documentation. + documentation. report_section_order: "nf-core-raredisease-methods-description": order: -1000 diff --git a/nextflow.config b/nextflow.config index 9e3b3fa2..ef5688fb 100644 --- a/nextflow.config +++ b/nextflow.config @@ -280,7 +280,7 @@ manifest { description = """call and score variants from WGS/WES of rare disease patients""" mainScript = 'main.nf' nextflowVersion = '!>=23.04.0' - version = '1.1.0dev' + version = '1.1.0' doi = '' } From 1c2fd16dee04ed28a787255b9edd6781a27d28a9 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Tue, 18 Jul 2023 14:19:05 +0200 Subject: [PATCH 134/136] remove ecr --- conf/public_aws_ecr.config | 39 -------------------------------------- nextflow.config | 9 --------- 2 files changed, 48 deletions(-) delete mode 100644 conf/public_aws_ecr.config diff --git a/conf/public_aws_ecr.config b/conf/public_aws_ecr.config deleted file mode 100644 index 93d0165f..00000000 --- a/conf/public_aws_ecr.config +++ /dev/null @@ -1,39 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - AWS ECR Config -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Config to set public AWS ECR images wherever possible - This improves speed when running on AWS infrastructure. - Use this as an example template when using your own private registry. ----------------------------------------------------------------------------------------- -*/ - -docker.registry = 'public.ecr.aws' -podman.registry = 'public.ecr.aws' - -process { - withName: 'ADD_MOST_SEVERE_CSQ' { - container = 'quay.io/biocontainers/python:3.8.3' - } - withName: 'ADD_MOST_SEVERE_PLI' { - container = 'quay.io/biocontainers/python:3.8.3' - } - withName: 'BWA_INDEX' { - container = 'quay.io/biocontainers/bwa:0.7.17--hed695b0_7' - } - withName: 'FASTQC' { - container = 'quay.io/biocontainers/fastqc:0.11.9--0' - } - withName: 'GET_CHROM_SIZES' { - container = 'quay.io/biocontainers/gnu-wget:1.18--0' - } - withName: 'QUALIMAP_BAMQC' { - container = 'quay.io/biocontainers/qualimap:2.2.2d--1' - } - withName: 'SAMPLESHEET_CHECK' { - container = 'quay.io/biocontainers/python:3.8.3' - } - withName: 'UNTAR' { - container = 'quay.io/docker.io/ubuntu:20.04' - } -} diff --git a/nextflow.config b/nextflow.config index ef5688fb..9faa8055 100644 --- a/nextflow.config +++ b/nextflow.config @@ -193,9 +193,6 @@ profiles { executor.cpus = 16 executor.memory = 60.GB } - public_aws_ecr { - includeConfig 'conf/public_aws_ecr.config' - } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } test_one_sample { includeConfig 'conf/test_one_sample.config' } @@ -249,12 +246,6 @@ env { // Capture exit codes from upstream processes when piping process.shell = ['/bin/bash', '-euo', 'pipefail'] -// Set default registry for Docker and Podman independent of -profile -// Will not be used unless Docker / Podman are enabled -// Set to your registry if you have a mirror of containers -docker.registry = 'quay.io' -podman.registry = 'quay.io' - def trace_timestamp = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') timeline { enabled = true From c1f4acade1bc4e991ef54f4e17c19a02ee86c500 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jul 2023 10:50:30 +0200 Subject: [PATCH 135/136] review suggestions --- CHANGELOG.md | 1 - docs/output.md | 23 +++++++++++----------- lib/WorkflowRaredisease.groovy | 4 ---- nextflow_schema.json | 31 ++++++++++++++++++++++++++++- workflows/raredisease.nf | 36 ---------------------------------- 5 files changed, 42 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 204d7a6c..65e05ecf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `Added` - Add GATK's cnv calling pipeline [#362](https://github.com/nf-core/raredisease/pull/362) -- Add `public_aws_ecr` profile for using AWS ECR public gallery images [#360](https://github.com/nf-core/raredisease/pull/360) - GATK's ShiftFasta to generate all the files required for mitochondrial analysis [#354](https://github.com/nf-core/raredisease/pull/354) - Feature to calculate CADD scores for indels [#325](https://github.com/nf-core/raredisease/pull/325) - HmtNote to annotate mitochondria [#355](https://github.com/nf-core/raredisease/pull/355) diff --git a/docs/output.md b/docs/output.md index 66fe854a..6d07a3bd 100644 --- a/docs/output.md +++ b/docs/output.md @@ -54,6 +54,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Annotation:](#annotation-) - [HaploGrep2](#haplogrep2) - [vcfanno](#vcfanno-1) + - [CADD](#cadd-1) - [VEP](#vep-2) - [HmtNote](#hmtnote) - [Rank variants and filtering](#rank-variants-and-filtering) @@ -247,15 +248,15 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. #### Manta -[Manta](https://github.com/Illumina/manta) calls structural variants (SVs) and indels from mapped paired-end sequencing reads. It combines paired and split-read evidence during SV discovery and scoring to improve accuracy, but does not require split-reads or successful breakpoint assemblies to report a variant in cases where there is strong evidence otherwise. Output vcf files are treated as intermediates and are not placed in the output folder by default. +[Manta](https://github.com/Illumina/manta) calls structural variants (SVs) and indels from mapped paired-end sequencing reads. It combines paired and split-read evidence during SV discovery and scoring to improve accuracy, but does not require split-reads or successful breakpoint assemblies to report a variant in cases where there is strong evidence otherwise. Output vcf files are treated as intermediates and are not placed in the output folder. #### TIDDIT sv -[TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) is used to identify chromosomal rearrangements using sequencing data. TIDDIT identifies intra and inter-chromosomal translocations, deletions, tandem-duplications and inversions, using supplementary alignments as well as discordant pairs. TIDDIT searches for discordant reads and split reads (supplementary alignments). Output vcf files are treated as intermediates and are not placed in the output folder by default. +[TIDDIT's sv](https://github.com/SciLifeLab/TIDDIT) is used to identify chromosomal rearrangements using sequencing data. TIDDIT identifies intra and inter-chromosomal translocations, deletions, tandem-duplications and inversions, using supplementary alignments as well as discordant pairs. TIDDIT searches for discordant reads and split reads (supplementary alignments). Output vcf files are treated as intermediates and are not placed in the output folder. #### GATK GermlineCNVCaller - CNV calling -[GATK GermlineCNVCaller](https://github.com/broadinstitute/gatk) is used to identify copy number variants in germline samples given their read counts and a model describing a sample's ploidy. Output vcf files are treated as intermediates and are not placed in the output folder by default. +[GATK GermlineCNVCaller](https://github.com/broadinstitute/gatk) is used to identify copy number variants in germline samples given their read counts and a model describing a sample's ploidy. Output vcf files are treated as intermediates and are not placed in the output folder. #### SVDB merge @@ -302,17 +303,17 @@ The pipeline performs variant calling using [Sentieon DNAscope](https://support. #### bcftools roh -[bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) is a program for detecting runs of homo/autozygosity.from only bi-allelic sites. The output files are not published in the output folder by default, and is passed to vcfanno for further annotation. +[bcftools roh](https://samtools.github.io/bcftools/bcftools.html#roh) is a program for detecting runs of homo/autozygosity.from only bi-allelic sites. The output files are not published in the output folder, and is passed to vcfanno for further annotation. #### vcfanno -[vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple conf file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder by default, and is passed to CADD and/or VEP for further annotation. +[vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple configuration file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder, and is passed to CADD and/or VEP for further annotation. We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files can be downloaded from [here](https://cadd.gs.washington.edu/download)). #### CADD -[CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder by default, and is passed to VEP for further annotation. +[CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder, and is passed to VEP for further annotation. #### VEP @@ -360,7 +361,7 @@ Based on VEP annotations, custom scripts used by the pipeline further annotate e #### SVDB query -[SVDB query](https://github.com/J35P312/SVDB#Query) allows you to quickly annotate your VCF with data from one or more structural variant databases. The output files are not published in the output folder by default, and is passed to vep for further annotation. +[SVDB query](https://github.com/J35P312/SVDB#Query) allows you to quickly annotate your VCF with data from one or more structural variant databases. The output files are not published in the output folder, and is passed to vep for further annotation. #### VEP @@ -407,17 +408,17 @@ The pipeline for mitochondrial variant discovery, using Mutect2, uses a high sen ##### vcfanno -[vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple conf file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder by default, and is passed to vep for further annotation. +[vcfanno](https://github.com/brentp/vcfanno) allows you to quickly annotate your VCF with any number of INFO fields from any number of VCFs. It uses a simple conf file to allow the user to specify the source annotation files and fields and how they will be added to the info of the query VCF. Values are pulled by name from the INFO field with special-cases of ID and FILTER to pull from those VCF columns. The output files are not published in the output folder, and is passed to vep for further annotation. We recommend using vcfanno to annotate SNVs with precomputed CADD scores (files can be downloaded from [here](https://cadd.gs.washington.edu/download)). -#### CADD +##### CADD -[CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder by default, and is passed to VEP for further annotation. +[CADD](https://cadd.gs.washington.edu/) is a tool for scoring the deleteriousness of single nucleotide variants as well as insertion/deletions variants in the human genome. In nf-core/raredisease, SNVs can be annotated with precomputed CADD scores using vcfanno. However, for small indels they will be calculated on the fly by CADD. The output files are not published in the output folder, and is passed to VEP for further annotation. ##### Hmtnote -[HmtNote](https://github.com/robertopreste/HmtNote) annotates vcf containing human mitochondrial variants with HmtVar. It will run offline by default wiht a database within the container. +[HmtNote](https://github.com/robertopreste/HmtNote) annotates vcf containing human mitochondrial variants with HmtVar. It will run offline by default with a database within the container. ##### VEP diff --git a/lib/WorkflowRaredisease.groovy b/lib/WorkflowRaredisease.groovy index 48f8bb4d..99e5f500 100755 --- a/lib/WorkflowRaredisease.groovy +++ b/lib/WorkflowRaredisease.groovy @@ -14,10 +14,6 @@ class WorkflowRaredisease { genomeExistsError(params, log) - - if (!params.fasta) { - Nextflow.error "Genome fasta file not specified with e.g. '--fasta genome.fa' or via a detectable config file." - } } // diff --git a/nextflow_schema.json b/nextflow_schema.json index dce94330..5367ada4 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -59,6 +59,7 @@ }, "bwa": { "type": "string", + "exists": true, "format": "directory-path", "description": "Directory for pre-built bwa index.", "help_text": "If none provided, will be generated automatically from the FASTA reference.", @@ -66,6 +67,7 @@ }, "bwamem2": { "type": "string", + "exists": true, "format": "directory-path", "description": "Directory for pre-built bwamem2 index.", "help_text": "If none provided, will be generated automatically from the FASTA reference.", @@ -73,6 +75,7 @@ }, "cadd_resources": { "type": "string", + "exists": true, "format": "directory-path", "fa_icon": "fas fa-file", "description": "Path to the directory containing cadd annotations.", @@ -80,6 +83,7 @@ }, "fai": { "type": "string", + "exists": true, "format": "file-path", "help_text": "If none provided, will be generated automatically from the FASTA reference", "description": "Path to FASTA genome index file.", @@ -98,6 +102,7 @@ }, "gcnvcaller_model": { "type": "string", + "exists": true, "fa_icon": "fas fa-file", "description": "A file containing the path to models produced by GATK4 GermlineCNVCaller cohort.", "format": "file-path", @@ -112,6 +117,7 @@ }, "gens_gnomad_pos": { "type": "string", + "exists": true, "format": "file-path", "fa_icon": "fas fa-file", "description": "Path to a list of common SNP locations for Gens.", @@ -120,6 +126,7 @@ }, "gens_interval_list": { "type": "string", + "exists": true, "format": "file-path", "fa_icon": "fas fa-file", "description": "Path to interval list for Gens.", @@ -128,6 +135,7 @@ }, "gens_pon": { "type": "string", + "exists": true, "format": "file-path", "fa_icon": "fas fa-file", "description": "Path to panel of normals for Gens.", @@ -136,6 +144,7 @@ }, "gnomad_af": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.tab(\\.gz)?$", @@ -144,6 +153,7 @@ }, "gnomad_af_idx": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.bed(\\.gz)?\\.idx$", @@ -165,6 +175,7 @@ }, "intervals_wgs": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.intervals?(_list)?$", @@ -173,6 +184,7 @@ }, "intervals_y": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.intervals?(_list)?$", @@ -181,6 +193,7 @@ }, "known_dbsnp": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.vcf(\\.gz)?$", @@ -188,6 +201,7 @@ }, "known_dbsnp_tbi": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.vcf(\\.gz)?\\.tbi$", @@ -202,19 +216,20 @@ }, "mito_name": { "type": "string", - "format": "path", "description": "Name of the mitochondrial contig in the reference fasta file", "help_text": "Used to extract relevant information from the references to analyse mitochondria", "fa_icon": "fas fa-align-center" }, "ml_model": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "description": "Path to sentieon machine learning model file." }, "mt_fasta": { "type": "string", + "exists": true, "format": "file-path", "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", @@ -223,6 +238,7 @@ }, "ploidy_model": { "type": "string", + "exists": true, "fa_icon": "fas fa-folder-open", "description": "Directory containing the ploidy model files", "format": "directory-path", @@ -230,6 +246,7 @@ }, "readcount_intervals": { "type": "string", + "exists": true, "fa_icon": "fas fa-file", "description": "Interval list file containing the intervals over which read counts are tabulated for CNV calling", "format": "file-path", @@ -237,6 +254,7 @@ }, "reduced_penetrance": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file-csv", "description": "File with gene ids that have reduced penetrance. For use with genmod" @@ -249,18 +267,21 @@ }, "score_config_snv": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "description": "SNV rank model config file for genmod." }, "score_config_sv": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "description": "SV rank model config file for genmod." }, "sequence_dictionary": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.dict$", @@ -268,6 +289,7 @@ }, "svdb_query_dbs": { "type": "string", + "exists": true, "format": "file-path", "description": "Databases used for structural variant annotation.", "fa_icon": "fas fa-file-csv", @@ -275,6 +297,7 @@ }, "target_bed": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file", "pattern": "^\\S+\\.bed(\\.gz)?$", @@ -283,6 +306,7 @@ }, "variant_catalog": { "type": "string", + "exists": true, "format": "file-path", "description": "Path to variant catalog file", "help_text": "Used with ExpansionHunter and if no catalogue is passed, then a default will be used.", @@ -290,12 +314,14 @@ }, "vcfanno_resources": { "type": "string", + "exists": true, "description": "Path to a file containing the absolute paths to resources defined within the vcfanno toml file. One line per resource.", "help_text": "If no file is passed, default configurations will be used according to genome build within the context of the pipeline.", "fa_icon": "fas fa-file" }, "vcfanno_toml": { "type": "string", + "exists": true, "description": "Path to the vcfanno toml file.", "pattern": "^\\S+\\.toml$", "help_text": "If no toml is passed, default configurations will be used according to genome build within the context of the pipeline.", @@ -303,6 +329,7 @@ }, "vcfanno_lua": { "type": "string", + "exists": true, "description": "Path to the vcfanno lua file.", "pattern": "^\\S+\\.lua$", "help_text": "Custom operations file (lua). For use when the built-in ops don't supply the needed reduction.", @@ -310,12 +337,14 @@ }, "vep_cache": { "type": "string", + "exists": true, "description": "Path to vep's cache directory.", "help_text": "If no directory path is passed, vcf files will not be annotated by vep.", "fa_icon": "fas fa-folder-open" }, "vep_filters": { "type": "string", + "exists": true, "format": "path", "fa_icon": "fas fa-file-csv", "description": "Path to the file containing HGNC_IDs of interest on separate lines." diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf index 50d3eaed..e5497222 100644 --- a/workflows/raredisease.nf +++ b/workflows/raredisease.nf @@ -10,42 +10,6 @@ def logo = NfcoreTemplate.logo(workflow, params.monochrome_logs) def citation = '\n' + WorkflowMain.citation(workflow) + '\n' def summary_params = paramsSummaryMap(workflow) -// Check input path parameters to see if they exist -def checkPathParamList = [ - params.bwa, - params.bwamem2, - params.call_interval, - params.cadd_resources, - params.fasta, - params.fai, - params.gens_gnomad_pos, - params.gens_interval_list, - params.gens_pon, - params.gnomad_af, - params.gnomad_af_idx, - params.input, - params.intervals_wgs, - params.intervals_y, - params.known_dbsnp, - params.known_dbsnp_tbi, - params.ml_model, - params.mt_fasta, - params.multiqc_config, - params.reduced_penetrance, - params.score_config_snv, - params.score_config_sv, - params.sequence_dictionary, - params.svdb_query_dbs, - params.target_bed, - params.variant_catalog, - params.vcfanno_lua, - params.vcfanno_resources, - params.vcfanno_toml, - params.vep_cache, - params.vep_filters -] - -for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Print parameter summary log to screen log.info logo + paramsSummaryLog(workflow) + citation From 572bee2d53e6082955f7d36723a7ea18354e7849 Mon Sep 17 00:00:00 2001 From: Ramprasad Neethiraj <20065894+ramprasadn@users.noreply.github.com> Date: Fri, 21 Jul 2023 11:20:15 +0200 Subject: [PATCH 136/136] update date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65e05ecf..9c92d787 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.1.0 - Abu [xxxx-xx-xx] +## v1.1.0 - Abu [2023-07-21] ### `Added`